是否可以在一个arraylist中存储整数,字符串和用户定义的类对象,如
ArrayList a=new ArrayList();
class Demo {}
Demo d=new Demo();
a.Add(12);
a.Add("Faizal Sardar Khan");
a.Add(d);
如果一切皆有可能,那么如何访问存储的元素(如何投出')? 如果没有,那么有没有办法实现这个?
答案 0 :(得分:2)
您可以使用is
关键字来检查对象的类型:
if (a[0] is String) /* do something */
if (a[1] is Demo) /* something other */
答案 1 :(得分:1)
您可能并不关心那里有什么对象,因此您可以将它们视为对象。
foreach(var o in myList)
Console.WriteLine(o);
如果你完全了解类型,你可以施展。
Dog dog = (Dog)myList[26];
dog.Bark();
如果你想要不同的行为取决于类型而你不知道它们在哪里,你可以检查它们是什么:
// Reference types:
Dog dog = myList[i] as Dog;
if (dog != null)
dog.Bark();
Cow cow = myList[i] as Cow;
if (cow != null)
cow.Moo();
// Value types:
if (myList[i] is int)
DoSomethingWith((int)myList[i]);
无论如何以及为何,这些只是同一设计气味的变化......
答案 2 :(得分:0)
是的,这当然是可能的。也可以通过List<Object>
来实现。至于铸造,这取决于。您如何知道列表中的位置?但要完成你的样本:
int twelve = (int)a[0];
string s = (string)a[1];
Demo e = (Demo)a[2];
很高兴知道你的最终目标是什么,因为我希望你尝试使用ArrayList作为它不是真正想要的东西,我们可以建议一个更好的方法。
答案 3 :(得分:0)
可能(如果不可取)将不同类型的对象插入到ArrayList中,因为它只保存对象。
如何让他们再次出局是棘手的。一种方法是只有一堆if
条件来检查对象是否属于某种类型,然后将其强制转换为该类型。
答案 4 :(得分:0)
您必须先检查元素的类型,然后才能使用它:
Object anything = list[0];
if (anything is Int32) {
var number = (Int32) anything;
} else if (anyting is String) {
var text = (String) anything;
} else {
if (Object.ReferenceEquals(null, anything)) {
throw new NotSupportedException("The element is NULL.");
} else {
throw new NotSupportedException("Unexpected type of the element \"" + anything.GetType().Name + "\".");
}
}