相關:A list of multiple data types?在列表中存儲不同的類型?
我想知道如何在數組內存儲不同的數組類型(包括系統類型)。
上面的問題介紹瞭如何創建一個列表,只允許使用接口的用戶定義的類。但是如果我想要一個只接受雙打和字符串的列表呢?關於雙打和我寫的課程呢?怎麼樣一個列表,將只接受一個類寫和一個別人寫的類(所以我不能添加一個接口到第三方類,我認爲)。
我認爲使用List<object>
,但我不知道這是否是公認的最佳做法。
相關:A list of multiple data types?在列表中存儲不同的類型?
我想知道如何在數組內存儲不同的數組類型(包括系統類型)。
上面的問題介紹瞭如何創建一個列表,只允許使用接口的用戶定義的類。但是如果我想要一個只接受雙打和字符串的列表呢?關於雙打和我寫的課程呢?怎麼樣一個列表,將只接受一個類寫和一個別人寫的類(所以我不能添加一個接口到第三方類,我認爲)。
我認爲使用List<object>
,但我不知道這是否是公認的最佳做法。
您不僅可以指定自定義類型。 List<int>
,List<double>
,List<string>
也適用。如果您需要存儲混合類型 - 您需要爲所有類型指定最接近的基類。在List<object>
可以存儲任何類型的實例。
但是,這將不允許您訪問數組內的類型的屬性。即如果您嘗試使用'List
@FranciscoSoto我認爲你是對的。如果您從頭開始編寫代碼,則不需要這樣做。編寫優質,深思熟慮的代碼非常重要。雖然有時候知道如何做一些骯髒的事情是很重要的,如果你需要做一些神奇的事情 - 例如爲了取悅顧客。 – 2017-06-29 17:34:26
您可以創建在其中實現Add()方法只接受雙打和字符串,就像一個自定義集合:
void Add(object toAdd)
{
if (toAdd is string)
// add into inner collection ...
... (same for double)
}
不過,說實話,我真的想不出任何辦法你需要一個只接受這兩種類型的集合。你也許可以解決這個問題一些其他的方式...
你應該創建一個類
public class MyClass
{
public string x {get;set;}
public double y{get;set;}
}
然後,只需創建一個類的數組。這個類可以擁有任何你想要的類型,這就是面嚮對象語言中的對象的美妙之處。
public MyClass[] someList=new MyClass[insert_number_of_elements];
你也可以使用?選項,列出以下類型:
public class MyClass
{
public string? x {get;set;}
public double? y {get;set;}
}
這樣,您可以選擇是否沒有,一個或兩個都可以有值。
或者,如果你不喜歡的HasValue /值功能:
public class MyClass
{
public enum EType { String, Double };
EType TypeFilled {get; private set }
string _x;
public string X { get { return _x; }; set { _x = value; TypeFilled = EType.String; }
double y;
public double y { get { return _y; }; set { _y = value; TypeFilled = EType.Double; }
}
這樣的typeFilled屬性決定什麼被填滿。你可以添加驗證,以防止被設置兩次等。
正如你可以告訴,我很新的C#。 – Michael0x2a 2012-02-07 22:11:58
你爲什麼要這麼做?如果你認爲你有這種需求,那麼可能有更好的方法來處理你正在構建的東西。特別是如果類型之間沒有任何關係。 – 2012-02-07 22:15:09
是的,但是如果我想要一個僅接受雙打和字符串的列表,而沒有別的呢? – Michael0x2a 2012-02-07 22:15:32