Есть ли способ получить тип объекта в arraylist?
Мне нужно сделать утверждение IF как следующее (в С#):
if(object is int)
//code
else
//code
спасибо
Есть ли способ получить тип объекта в arraylist?
Мне нужно сделать утверждение IF как следующее (в С#):
if(object is int)
//code
else
//code
спасибо
вы можете использовать обычные GetType() и typeof()
if( obj.GetType() == typeof(int) )
{
// int
}
То, что вы делаете, прекрасно:
static void Main(string[] args) {
ArrayList list = new ArrayList();
list.Add(1);
list.Add("one");
foreach (object obj in list) {
if (obj is int) {
Console.WriteLine((int)obj);
} else {
Console.WriteLine("not an int");
}
}
}
Если вы проверяли ссылочный тип вместо типа значения, вы могли бы использовать оператор as
, так что вам не нужно было сначала проверять тип, а затем бросать:
foreach (object obj in list) {
string str = obj as string;
if (str != null) {
Console.WriteLine(str);
} else {
Console.WriteLine("not a string");
}
}
Используйте GetType()
, чтобы узнать тип Object
.
Это в значительной степени, как вы это делаете:
if (theArrayList[index] is int) {
// unbox the integer
int x = (int)theArrayList[index];
} else {
// something else
}
Вы можете получить объект Type для объекта, но тогда вы должны убедиться, что он не является нулевой ссылкой:
if (theArrayList[index] == null) {
// null reference
} else {
switch (theArrayList[index].GetType().Name) {
case "Int32":
int x = (int)theArrayList[index];
break;
case "Byte":
byte y = (byte)theArrayList[index];
break;
}
}
Обратите внимание: если вы не застряли в каркасе 1.x, вы не должны использовать класс ArrayList
вообще. Вместо этого используйте класс List<T>
, где вам следует использовать более конкретный класс, чем Object
, если это возможно.