[英]Generic list in C# 4.0
我正在嘗試使用C#和.NET 4.0創建通用列表
List<var> varlist = new List<var>();
此代碼產生錯誤“上下文關鍵字'var'可能只出現在局部變量聲明中”
原因是因為我想做這樣的事情:
List<var> varList = new List<var>(); // Declare the generic list
List<Object1> listObj1; // List of Object1
List<Object2> listObj2; // List of Object2
varList = listObj1; // Assign the var list to list of Object1
varList = listObj2; // Re-assign the var list to the list of Object2
有沒有辦法在C#.NET 4.0中執行此操作?
如果您想要一個通用列表,那么您必須在某處定義該泛型類型。 我假設這是在classlevel:
class MyClass<T> {
List<T> someGenericList = new List<T>();
}
或者您對所有類型使用基類:
List<object> someGenericList = new List<object>();
或者你讓它變得dynamic
(只有當你完全確定你需要它時才使用它)
List<dynamic> someGenericList = new List<dynamic>();
或者最后:你適應你的設計。 通常,如果您必須定義這種高級別類型的集合,則可以選擇以允許您使用更多常見類型的方式對其進行重構。 如果您想要對此進行反饋,那么您必須提供有關上下文的更多信息。
不要忘記閱讀MSDN:C#泛型的介紹 。
您的代碼不起作用的原因是因為var
是關鍵字而不是類型。 它將自身替換為后面的表達式的實際類型,從而允許您正確創建表達式,而不必首先顯式定義它。 因此,為了使用它,實際上必須有一個跟隨它的表達式。
您無法使用var定義方法參數,因為必須在編譯時解析var部分,並且編譯器不能這樣做。 你最好的選擇是使用:
List<dynamic> dynamicList = new List<dynamic>();
我認為應該在編譯期間解決它的等價物
List<object> dynamicList = new List<object>();
然后,每次訪問列表成員時,為了使用它們執行有意義的操作,您必須明確地將它們轉換為所需類型。 你必須考慮是否值得這樣做。 如果你可以:
將var更改為C#中不是關鍵字的內容。 例如
List<object> varlist = new List<object>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.