2013-09-25 3 views
0

Я пытаюсь увидеть, если можно использовать System.Type в переменной в comparison.I имеют следующий код:Проверьте, является ли класс типом с использованием переменной?

internal ObservableCollection<FREQUENCY> GetFrequencies(System.Type equipmenttype) 
    { 
     ... 
     foreach (var incident in query) 
     { 

      if (typeof(equipmenttype).IsSubclassOf(typeof(incident))) 
      { 
       foreach (var freq in incident.FREQUENCY) 
       { 
        freqs.Add(freq); 
       } 
      } 
     } 
     return freqs; 
    } 

Но переменные «TMP» и «equipmenttype» тянуть ошибку «Тип или имя пространства имен« tmp »не удалось найти (вы не указали директиву или ссылку на сборку?)«

Я понимаю, что обычно это используется, говоря типом (MYCLASS), но мне было любопытно, если это было возможно с использованием переменной System.Type, или если бы был какой-то способ сделать это. Благодарю.

+0

Я не верю, что 'typeof (инцидент)' будет компилироваться, поскольку это ссылка, а не тип. Это должно быть 'инцидент.GetType()'. – BACON

+0

Взгляните на API Reflection: http://msdn.microsoft.com/en-us/library/ms173183%28v=vs.90%29.aspx – JNYRanger

ответ

4

Я не вижу, где tmp в вашем коде. но уверен, что вы пропустили этот

if (typeof(equipmenttype).IsSubclassOf(typeof(incident))) 

Должно быть

if (equipmenttype.IsSubclassOf(incident.GetType())) 

typeof оператор используется, чтобы получить RuntimeType из типа. Но у вас уже есть RuntimeType, то есть equipmenttype, поэтому здесь вам не нужно использовать typeof.

+0

Это имеет смысл. Большое спасибо! Раньше я никогда не пробовал ничего подобного. –

+0

@JohnEdwards Добро пожаловать. –

2

Try if (equipmenttype.IsSubclassOf(incident.GetType()). equipmenttype уже является System.Type, а GetType() необходимо вызвать для определения типа экземпляра.

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