簡體   English   中英

C#中帶有類型參數的泛型類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM