I’ve got this class:
class Foo {
public string Name { get; set; }
}
And this class
class Foo<T> : Foo {
public T Data { get; set; }
}
Here’s what I want to do:
public Foo<T> GetSome() {
Foo foo = GetFoo();
Foo<T> foot = (Foo<T>)foo;
foot.Data = GetData<T>();
return foot;
}
What’s the easiest way to convert Foo to Foo<T>? I can’t cast directly InvalidCastException) and I don’t want to copy each property manually (in my actual use case, there’s more than one property) if I don’t have to. Is a user-defined type conversion the way to go?
You can create an explicit conversion from Foo within
Foo<T>.Edit: This only works without inheritance. It appears you are not able to do a user-defined conversion from a base to a derived class. See comments from Mads Torgersen here http://social.msdn.microsoft.com/forums/en-US/csharplanguage/thread/14cf27cf-b185-43d6-90db-734d2ca3c8d4/ :
It looks like you may be stuck with defining a method to turn a Foo into a
Foo<T>. That, or drop the inheritance. Neither solution sounds particularly ideal.