Cast - 字符串到Custom <string> </string>

时间:2011-08-17 12:43:30

标签: c#

我的属性有一个自定义包装器对象:MyType<t>。 我有这些类型的私人成员和类型为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 加载属性,并且未建议使用建议的方法。因此,当反射引擎尝试加载对象时,隐式转换不会触发。

2 个答案:

答案 0 :(得分:5)

您的运营商倒退了。它支持从MyType<t>t的投射。你想要相反的方式。也许这就是你要找的东西。

 private t _value;

 private MyType(t val)
 {
      _value = val;
 }

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

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

答案 1 :(得分:1)

您的隐式强制转换运算符正在与错误抱怨的方向相反,您需要实现另一个隐式运算符,以便从t转到MyType<t>

您也可以使用显式转换(您执行string foo = (string)someObject;之类的操作):

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