相关:A list of multiple data types?
我想知道如何在数组中存储不同的数组类型(包括系统类型)。
上述问题涉及如何使用接口创建仅允许用户定义的类的列表。但是,如果我想要一个只接受双打和字符串的列表呢?我写的双打和课程怎么样?如果列表只接受一个写入的类和一个别人写的类(我认为我不能在第三方类中添加一个接口)。
我考虑使用List<object>
,但我不知道这是否是公认的最佳做法。
答案 0 :(得分:5)
您不仅可以指定自定义类型。 List<int>
,List<double>
,List<string>
也会有效。如果需要存储混合类型 - 您需要为所有类型指定最接近的基类。在List<object>
中可以存储任何类型的实例。
答案 1 :(得分:4)
如果您愿意放弃类型安全,可以使用ArrayList,这是使用预先通用内容列表的唯一方法。
你可以在它周围放一些包装代码,只接受双打和字符串。
答案 2 :(得分:2)
您可以创建一个自定义集合,在其中实现只接受双精度和字符串的Add()方法,如:
void Add(object toAdd)
{
if (toAdd is string)
// add into inner collection ...
... (same for double)
}
但是,说实话,我真的想不出你需要一个只接受这两种类型的集合的方法。您可以通过其他方式解决问题...
答案 3 :(得分:1)
你应该创建一个类
public class MyClass
{
public string x {get;set;}
public double y{get;set;}
}
然后只需创建该类的数组。这个类可以有你想要的任何类型,这就是在面向对象语言中拥有对象的美妙之处。
public MyClass[] someList=new MyClass[insert_number_of_elements];
答案 4 :(得分:1)
public class MyClass
{
public string? x {get;set;}
public double? y {get;set;}
}
通过这种方式,您可以选择是否一个,一个或两个都可以有值。
或者,如果你不喜欢HasValue / Value函数:
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属性决定填充的内容。您可以添加验证以防止被设置两次等。
答案 5 :(得分:0)
我知道我参加聚会有点晚了,但是我一直都这样做。特别是在初始化新类时。我喜欢在main方法之外进行繁重的工作,因此我使用对象数组来处理它。 Object[]
使您可以将所需的内容放入数组中。然后,当您返回数组时,将数组值强制转换为所需的值。例如:
int NewInt = (int)InitArray[0];
string NewString = (String)InitArray[1];
double NewDouble = (Double)InitArray[2];
在所有情况下,这都不是最优雅的解决方案,但是对于我所做的工作,它肯定可以很好地处理单个输出问题。