2014-10-06 3 views
0

У меня есть функция.Как проверить тип объекта T?

protected Boolean MainFunction<T>(T objectData, string Id, out string Value) 
{ 
    //here I need to check whether T equal the object I need or not 
} 

И выше MainFunction вызывается Function1 и Function2, где я прохожу MyObject1 и MyObject2.

Я хочу проверить T objectData ли это MyObject1 или MyObject2 внутри MainFunction. Пожалуйста, дайте мне какие-либо предложения.

public bool Function1(string ID, out string Value, out ErrorReport error) 
{ 
    return MainFunction(Data.MyObject1, ID, out Value, out error); 
} 

public bool Function2(string ID, out string Value, out ErrorReport error) 
{ 
    return MainFunction(Data.MyObject2, ID, out Value, out error); 
} 
+0

Можете ли вы привести пример того, почему вам нужно знать, какой тип передается? –

+1

Непонятно, что вы подразумеваете под этим: «Я хочу проверить T objectData - это MyObject1 или MyObject2 внутри MainFunction» - Что вы пытаетесь определить? – David

+5

Имейте базовый класс для 'MyObject1' и' MyObject2' и используйте [generic constraint] (http://msdn.microsoft.com/en-us/library/d5x73970.aspx), например 'where T: BaseClass', но вы можете пересмотреть свой дизайн, если вы проверяете тип в универсальном методе, тогда вам, вероятно, не нужны дженерики. – Habib

ответ

0

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

Во-вторых, вы можете использовать is, чтобы проверить, если тип соответствует тот, который вам нужно:

if (objectData is MyObject1) 
{ 
    ... 
} 
else if (objectData is MyObject2) 
{ 
    ... 
} 

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

Boolean MainFunction<T>(T objectData, string Id, out string Value) where T : BaseClass 
{ 
} 
+0

Да. Извините, что ушел, чтобы включить в мой вопрос, где T: BaseClass. – PPPA

+0

Привет, я понял ваш ответ и больше читал в MSDN о родовых. Спасибо за помощь. – PPPA

Смежные вопросы