我正在嘗試做一個簡單的測試,其中我將兩個通用對象傳遞給測試函數,看看它們是否可以轉換爲List<S>
,並進一步檢查計數的名單是平等的。Can not cast a generic type to list in C#
下面的代碼工作:
private static void Test<T> (T obj1, T obj2) {
if (typeof(T).IsGenericType) {
var genericTypeParam1 = typeof(T).GetGenericArguments().First();
Console.WriteLine(genericTypeParam1);
// LINE MARKER 1
// var obj1AsList = (obj1 as IEnumerable<genericTypeParam1>);
}
}
static void Main(string[] args) {
Test(Enumerable.Range(0, 5).ToList(), Enumerable.Range(0, 5).ToList());
Console.ReadLine();
}
但是,如果我去掉打上LINE MARKER 1
行了,我得到以下錯誤:
The type or namespace name 'genericTypeParam1' could not be found (are you missing a using directive or an assembly reference?)
我不事先知道,測試將得到List
小號。但我的意圖是先檢查是否obj1
和obj2
可以作爲表,然後預先比較
var obj1AsList = obj1 as List<genericTypeParam1>;
var obj2AsList = obj2 as List<genericTypeParam1>;
var flag = (obj1AsList != null) && (obj2AsList != null) && (obj1AsList.Count() == obj2AsList.Count());
感謝您的幫助。
測試<給出類型這裏>(Enumerable.Range(0,5 ).ToList(),Enumerable.Range(0,5).ToList());你錯過了類型 – DevEstacion
@RonaldEstacion這不是問題。這將由編譯器推斷。 – MarcinJuraszek
在你的示例代碼中,你表明你想轉換爲'IEnumerable'而不是'IList',這是否正確?只有後者纔有'Count'屬性,可以通過轉換到非泛型'Collections'接口來訪問它。 (見下面的答案)。 – nicholas