使用类型值作为通用类型

时间:2020-04-02 17:38:26

标签: c# .net

有可能做这样的事情吗?

Type MyType = typeof(SomeClass);
SomeMethod<MyType>();

SomeMethod在哪里,

T SomeMethod<T>() where T : TypeOfSomeClass {
   ...

   return NewInstanceOfT;
}

这当然会失败。我想存储一个类的 type ,然后使用该类型({{1}的)作为方法的通用类型。

以下是一个用例:

MyType

class WindowService { public static T CreateWindow<T>() where T : Window { return (T)Activator.CreateInstance(typeof(T)); } } ... (in some other class) ... Type TypeOfWindow = typeof(MyConcreteWindow); void CreateAWindow() { Window Obj = WindowService.CreateWindow<TypeOfWindow>(); } 应该创建一个CreateWindow<T>中存储的类的实例,只要它扩展了TypeOfWindow

1 个答案:

答案 0 :(得分:0)

如果对您要完成的工作没有误解,可以这样进行:

public void MyMethod<T>(T t) where T : SomeClassOrInterface{ // Code }

根据Microsoft's Documentation(这是页面底部的示例之一)

编辑:如果要返回类型T的对象,则类似于这样

public T Whatever<T>(string values)
{  
    return /* code to convert the setting to T... */
}

在这种情况下,您可以在this question

中查看更多详细信息