【问题标题】:Cast - string to Custom<string>将字符串转换为自定义<字符串>
【发布时间】:2023-03-11 12:40:02
【问题描述】:

我的属性有一个自定义包装对象:MyType&lt;t&gt;。 我有这些类型的私有成员和 t 类型的公共成员。

我正在尝试加载对象,但遇到了转换错误:

无法将“System.String”类型的对象转换为类型 'Model.MyType`1[System.String]

我有以下方法:

private t _value;

public static implicit  operator t(MyType<t> obj)
{
    return obj._value;
}

任何帮助我完成演员阵容的工作都会很棒。

更新:

该成员如下所示:

 MyType<string> PostalCode =  new MyType<string>();

我正在使用 Dapper 加载属性,并且没有命中建议的方法。因此,当反射引擎尝试加载对象时,不会触发隐式转换。

【问题讨论】:

    标签: c#


    【解决方案1】:

    您的操作员倒退了。它支持从MyType&lt;t&gt; 转换为t。你想反过来。也许您正在寻找类似的东西。

     private t _value;
    
     private MyType(t val)
     {
          _value = val;
     }
    
     public static implicit operator MyType<t>(t obj)
     {
         return new MyType<t>(obj);
     }
    

    使用构造函数是可选的,我个人只是觉得更干净。您可以只使用默认构造函数并在您的运算符中显式设置字段。

    【讨论】:

    • 这是有道理的。但是,这些方法没有被击中。
    • @Arnej65 Dapper 可能会尝试进行显式转换,您也可以覆盖它,将 implicit 更改为 explicit
    • 我把它和这个混在一起:stackoverflow.com/questions/5898988/…
    【解决方案2】:

    您的隐式转换运算符与错误所抱怨的方向相反,您需要实现另一个隐式运算符以从 t 转到 MyType&lt;t&gt;

    您也可以通过显式强制转换来执行相同的操作(您可以执行string foo = (string)someObject; 之类的操作):

    http://msdn.microsoft.com/en-us/library/xhbhezf4(v=vs.71).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 2019-10-10
      相关资源
      最近更新 更多