Как проверить тип объекта в ArrayList - PullRequest
17 голосов
/ 15 марта 2010

Есть ли способ получить тип объекта в массиве?

Мне нужно сделать IF IF следующим образом (в C #):

if(object is int)
 //code
else
 //code

спасибо

Ответы [ 4 ]

33 голосов
/ 15 марта 2010

вы можете использовать обычные GetType () и typeof ()

if( obj.GetType() == typeof(int) )
{
    // int
}
15 голосов
/ 15 марта 2010

То, что вы делаете, прекрасно:

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");
        }
    }
3 голосов
/ 15 марта 2010

Используйте GetType(), чтобы узнать тип Object.

1 голос
/ 15 марта 2010

Вот как вы это делаете:

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, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...