Alan Alan - 24 days ago 10
C# Question

C# creating an implicit conversion for generic class?

I have a generics class that I used to write data to IsolatedStorage.

I can use an

static implicit operator T()
to convert from my Generic class to the Generic Parameter
T


e.g.

MyClass<double> foo = new MyClass(187.0);

double t = foo;


My question is, how can I do the reverse?

MyClass<double> foo = new MyClass(187.0);
double t = 0.2d;
foo = t;


The implicit operator has to be static, so I'm not sure how I can pass in the instance of my class?

Answer

EDIT:

If you want to be able to change the value of T in your class, I would recommend exposing it as a property like:

T Value { get; set; }

That will allow you to change the value, instead of the behavior of the implicit operator returning an entirely new instance of the class.


You can and can't using implicit operators. Doing something like

 public static implicit operator int(MyType m) 
 public static implicit operator MyType(int m) 

will implicitly convert from MyType to int and from int to MyType respectively. However, you're right, since they are static, the int to MyType specifically will have to create a new instance of MyType and return that.

So this code:

MyClass<double> foo = new MyClass(187.0);
double t = 0.2d;
foo = t;

wouldn't replace the value in foo with t, the implicit operator would return an entirely new MyClass from t and assign that to Foo.