簡體   English   中英

C#4.0中的通用列表

[英]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>();

然后,每次訪問列表成員時,為了使用它們執行有意義的操作,您必須明確地將它們轉換為所需類型。 你必須考慮是否值得這樣做。 如果你可以:

  1. 對不同類型使用不同的列表
  2. 使用具有相關抽象或虛方法的基類,該方法正在被預期的行為覆蓋。

將var更改為C#中不是關鍵字的內容。 例如

 List<object> varlist = new List<object>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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