我想知道是否有建立一個類可以接受多個通用參數 未在編譯時如何通過多個通用參數
class Something<T,V,U>
這個例子中已知的方式顯示了所期望的一類在運行時接收3個通用參數。 我正在尋找一種方式來指定一個類,它會除外變化量的多個參數沿
class Something<T[]>
行
一些東西,我以後可以暴露使用反射
Type [] types = GetType().GetGenericArguments();
我想知道是否有建立一個類可以接受多個通用參數 未在編譯時如何通過多個通用參數
class Something<T,V,U>
這個例子中已知的方式顯示了所期望的一類在運行時接收3個通用參數。 我正在尋找一種方式來指定一個類,它會除外變化量的多個參數沿
class Something<T[]>
行
一些東西,我以後可以暴露使用反射
Type [] types = GetType().GetGenericArguments();
你可以做一些類 - 一種
public static class TypeHelper
{
public static IEnumerable<Type> GetTypeCombination(this Type type)
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(T<,>))
return type.GetGenericArguments().SelectMany(GetTypeCombination);
return new Type[] { type };
}
}
public class T<T1, T2>
{
public static IEnumerable<Type> GetTypeCombination()
{
return typeof(T1).GetTypeCombination()
.Concat(typeof(T2).GetTypeCombination());
}
}
,並使用它作爲
var list = T<int, T<string, int[]>>.GetTypeCombination().ToList();
得到(通過)的類型的動態列表 - 不知道這是最好的方式
似乎真的很複雜..我不太明白你做了什麼...... –
你不能傳遞泛型參數的變量數,但你可以傳遞一個類型,它將幾個(一對)它們(每個這對的元素也可以是2) – DanNsk
的組合子,謝謝我需要嘗試一下。 它現在看起來超過了我的聯盟。 –
您無法指定未知數量的泛型。你能得到的最接近的是定義所有可能的變體,或者至少與你願意處理的變體一樣多。
public class Something { }
public class Something<T1> : Something { }
public class Something<T1, T2> : Something { }
public class Something<T1, T2, T3> : Something { }
public class Something<T1, T2, T3, T4> : Something { }
public class Something<T1, T2, T3, T4, T5> : Something { }
...
基類將爲您提供通用的引用以及集中儘可能多的代碼的地方。
根據你的惡意,你最終可能會寫很多冗餘代碼,在這種情況下,你應該重新考慮你對泛型的使用。
感謝我的工作我想到了一個變通 我得到使用反射 我的T和然後裏面的東西
變量泛型參數?我不這麼認爲。 – BoltClock
使用泛型的主要目的是在編譯時確保類型安全。如果在運行時間之前不知道所涉及的泛型參數,那麼您並不想正確使用泛型。 –
我從來沒有使用它們,就像我建議我只是建立一種分層索引組件,它的圖層持有一個不同類型的鍵的排序字典,我認爲如果像 這樣的變化量有一個參數存在,它會節省我是一個混亂的解決方法的困難。 感謝您忽視該觀念。 –