如何将对象转换为只知道类名的类?

时间:2011-06-21 08:36:26

标签: c# .net types

我是C#NewBie,我遇到的情况是我知道对象的类型(ClassName)

ObservableCollection<ClassName>

现在我需要使用它来转换与

相同的返回对象
ObservableCollection<object>

我该怎么办呢

ObservableCollection<type>其中type是ClassName的类型?是否有可能当我拥有ClassName的类型时我可以使用它而不是ClassName,如果不是我如何实现它?

4 个答案:

答案 0 :(得分:1)

具体类的通用参数永远不会共变。在接口上,如果它们既可以用作输入参数,也可以用作输出参数,但它们只能是变体,但不能同时使用。

因此,您无法将ObservableCollection<T>投射到ObservableCollection<object>

查看Covariance and Contravariance in Generics

答案 1 :(得分:0)

我对你的措辞感到有点困惑,你的意思是:

typeof(ClassName)

答案 2 :(得分:0)

试试这个:

return new ObservableCollection<object>(myClassNameObservableCollection);

答案 3 :(得分:0)

从你问题的最后一句我觉得你需要那个

Type.MakeGenericType

所以你可以这样做:

Type generic = typeof(ObservableCollection<>);
Type[] typeArgs = { typeof(ClassName) };
Type constructed = generic.MakeGenericType(typeArgs);
var obj = Activator.CreateInstance(constructed);