Определение класса объекта в C # IList - PullRequest
0 голосов
/ 30 марта 2011

У меня есть переменная IList, которая содержит 1 - N записей myObject. Каждая запись может быть экземпляром myObject или любого из его дочерних объектов (объектов производного класса). При выполнении foreach над IList, как я могу определить, к какому типу объектов относится каждый член IList?

foreach(myObject anObject in myList)
{
   if(anObject is of type ???)
}

Ответы [ 5 ]

1 голос
/ 30 марта 2011

Взгляните на оператор .

foreach(MyObject anObject in myList)
{
   if(anObject is MyTypeWhichInheritsFromMyObject)
     ...
}
1 голос
/ 30 марта 2011

Вы можете использовать

anObject is MyObject

или

Type.IsSubclassOf(MyObject)

Вы также можете использовать baseType.IsAssignableFrom(type), чтобы определить, может ли тип быть производным от данного базового типа

0 голосов
/ 30 марта 2011

Если ваша структура ОО спроектирована правильно, вам действительно не нужно знать - все, что вы хотите сделать с объектом, может быть сделано с использованием соответствующей реализации, независимо от того, какой это тип.

С учетом сказанного вы можете получить тип любого объекта, вызвав:

Type type = myObject.GetType();

И вы можете сравнить этот тип с другим конкретным типом, например:

if (myObject.GetType() == typeof(Foo))

Оператор is может доставить вам неприятности, в зависимости от вашего сценария, поскольку это будет верно, если вы проверяете, является ли что-то родительским классом, даже если это действительно дочерний класс. Например:

class Foo {}
class Bar : Foo {}

if (myObject is Foo)

Этот if вернет true для Foo или Bar объектов.

0 голосов
/ 30 марта 2011

Если вы хотите узнать тип каждого экземпляра, сделайте это так:

foreach(myObject anObject in myList)
{
    Type anObjectType = anObject.GetType();
    // Perform appropriate work.
}
0 голосов
/ 30 марта 2011

Я не большой разработчик .NET, но в Java есть оператор instanceof, который проверяет, является ли объект экземпляром определенного класса.

Проверьте эту ссылку, он должен сделатьс typeid объекта, я думаю, это то, что вы ищете, приятель.

http://msdn.microsoft.com/en-us/library/b2ay8610(vs.71).aspx

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