[英]Generic types with type parameter in C#
我不認為這可以在C#中完成,但發布這個只是為了確保。 這是我的問題。 我想在C#中做這樣的事情:
var x = 10;
var l = new List<typeof(x)>();
要么
var x = 10;
var t = typeof(x);
var l = new List<t>();
但當然這不起作用。 雖然這不應該是一個問題,因為類型t在編譯時被解析。 我知道這可以通過反射來解決,但是在編譯時使用反射知道類型會是過度的。
public static List<T> CreateCompatibleList<T> (T t)
{
return new List<T> () ;
}
var x = 10 ;
var l = CreateCompatibleList (x) ;
您正試圖讓.Net使用運行時運算符設置泛型類型。 如你所知,那是行不通的。 必須在編譯時設置泛型類型。
在C#中這樣定義泛型:
var someList = new List<int>();
你不能像這樣定義泛型:
var x = 1;
var someType = typeof(x);
var someList = new List<someType>();
因為在這種情況下你是在運行時指定類型,而不是編譯時。 C#不支持這一點。
你無法完全按照自己的要求去做,但通過一點反思,你就可以完成同樣的事情
Type genericType = typeof(List<>);
Type[] type = new Type[] { typeof(int) };
Type instanceType = genericType.MakeGenericType(type);
object instance = Activator.CreateInstance(instanceType );
var l = (List<int>)instance;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.