我的属性有一个自定义包装器对象: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 加载属性,并且未建议使用建议的方法。因此,当反射引擎尝试加载对象时,隐式转换不会触发。
答案 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