我有一个泛型类,我曾经用于将数据写入IsolatedStorage.
我可以使用an static implicit operator T()从我的Generic类转换为Generic ParameterT
例如
MyClass<double> foo = new MyClass(187.0);
double t = foo;
Run Code Online (Sandbox Code Playgroud)
我的问题是,我该怎么做呢?
MyClass<double> foo = new MyClass(187.0);
double t = 0.2d;
foo = t;
Run Code Online (Sandbox Code Playgroud)
隐式运算符必须是静态的,所以我不确定如何传递我的类的实例?
And*_*ren 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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您希望能够更改类中的值T,我建议将其作为属性公开,如:
T Value { get; set; }
Run Code Online (Sandbox Code Playgroud)
这将允许您更改值,而不是隐式运算符返回该类的全新实例的行为.
您可以也可以不使用隐式运算符.做点什么
public static implicit operator int(MyType m)
public static implicit operator MyType(int m)
Run Code Online (Sandbox Code Playgroud)
将隐式转换从MyType到int从int到MyType分别.但是,你是对的,因为它们是静态的int,MyType特别需要创建一个新实例MyType并返回它.
所以这段代码:
MyClass<double> foo = new MyClass(187.0);
double t = 0.2d;
foo = t;
Run Code Online (Sandbox Code Playgroud)
不会替换foowith中的值t,隐式运算符将返回一个全新 MyClass的t并将其赋值给Foo.
| 归档时间: |
|
| 查看次数: |
9671 次 |
| 最近记录: |