2011-04-15 3 views
7

Можно создать дубликат:
Can’t operator == be applied to generic types in C#?Применяя «==» оператора обобщенного параметра

У меня есть класс DatabaseLookup {}, где параметр Т будет использоваться с помощью методов подстановки в класс. Перед поиском, я хочу посмотреть, был ли T уже поднят с чем-то вроде

if (T == previousLookupObject) ... 

Это совсем не скомпилировано. Что мешает мне сделать такое простое сравнение?

+3

Является 'T' ссылки на родовой тип или фактические переменный родовой. 'T' обычно используется как имя родового типа. Не объект, а тип. Попробуйте определить переменную типа 'T'. –

+2

И затем используйте 'thisObject.Equals (previousLookupObject)' вместо '==' –

ответ

16

T - параметр типа. Если ваш previousLookupObject является объектом Type, вам необходимо сделать typeof(T) == previousLookupObject.

Если previousLookupObject является переменной типа T, для его сравнения вы должны иметь фактический объект T.

Если вы хотите узнать, если previousLookupObject имеет тип T, вам нужно использовать is оператора: if (previousLookupObject is T).

8

T есть тип, previousLookupObject есть (я полагаю) экземпляр объекта. Итак, вы сравниваете яблоки с апельсинами. Попробуйте следующее:

if (previousLookupObject is T) 
{ 
    ...  
} 
0

Какой тип previousLookupObject? Типичные параметры типа являются типами и не могут использоваться как обычные ссылки на объекты.

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