我有一个泛型类,我曾经将数据写入IsolatedStorage。
我可以使用static implicit operator T()
从我的Generic类转换为Generic Parameter T
e.g。
MyClass<double> foo = new MyClass(187.0);
double t = foo;
我的问题是,我该如何反过来?
MyClass<double> foo = new MyClass(187.0);
double t = 0.2d;
foo = t;
隐式运算符必须是静态的,所以我不确定如何传递我的类的实例?
答案 0 :(得分:16)
此课程显示T和MyClass之间的转换。
class MyClass<T>
{
public MyClass(T val)
{
Value = val;
}
public T Value { get; set; }
public static implicit operator MyClass<T>(T someValue)
{
return new MyClass<T>(someValue);
}
public static implicit operator T(MyClass<T> myClassInstance)
{
return myClassInstance.Value;
}
}
答案 1 :(得分:7)
编辑:
如果您希望能够更改班级中T
的值,我建议将其公开为以下属性:
T Value { get; set; }
这将允许您更改值,而不是隐式运算符返回该类的全新实例的行为。
您可以也可以不使用隐式运算符。做点什么
public static implicit operator int(MyType m)
public static implicit operator MyType(int m)
将分别隐式地从MyType
转换为int
,从int
隐式转换为MyType
。但是,你是对的,因为它们是静态的,int
到MyType
必须专门创建MyType
的新实例并返回它。
所以这段代码:
MyClass<double> foo = new MyClass(187.0);
double t = 0.2d;
foo = t;
不会将foo
中的值替换为t
,隐式运算符会从MyClass
返回全新的 t
并分配那到Foo
。
答案 2 :(得分:1)
您应该能够通过简单地指定另一个隐式运算符来转换另一种方式:
public static implicit operator MyClass<T>(T input)
{
return new MyClass<T>(input);
}