2013-11-11 3 views
0

У меня есть имя класса DB.IFCArray, в котором есть много полей в нем (имя, описание и т. Д.), Я хочу реализовать функцию , которая отправляется в DB.IFCArray.field и делает материал ..Доступ к полю класса с использованием строки

public static bool if_is_a(DB.IFCArray object1, string field, string value) 
     {    
      if (object1.field == value) // this ofc not working, but hope you get the idea 
      return true; 

      return false; 
     } 
+1

Поиск в Интернете для "отражения". Также обратите внимание, что вам _almost never_ требуется отражение, так как большинство проблем можно решить более элегантно, используя соответствующие объектно-ориентированные конструкции в качестве интерфейсов. – CodeCaster

ответ

1

вы можете, конечно, использовать Reflection

//get the property indicated by parameter 'field' 
//Use 'GetField' here if they are actually fields as opposed to Properties 
//although the merits of a public field are dubious... 
     var prop = object1.GetType().GetProperty(field); 
//if it exists 
     if (prop!=null) 
     { 
      //get its value from the object1 instance, and compare 
      //if using Fields, leave out the 'null' in this next line: 
      var propValue = prop.GetValue(object1,null); 

      if (propValue==null) return false; 
      return propValue; 
     } 
     else 
     { 
      //throw an exception for property not found 
     } 

Но, как упоминалось выше CodeCaster, я рекомендую вам взглянуть на ваш дизайн и посмотреть, если это действительно необходимо. Какая здесь большая картина? Если вы абсолютно 100% не будете знать имена свойств до времени выполнения, есть почти всегда лучший способ ...

+0

Ty. Я должен использовать Reflection для этого, но только одна проблема с кодом, который вы предложили, кажется, что prop имеет значение null, даже если «field» содержит точно имя одного из свойств объекта object1. Может ли быть какая-то небольшая ошибка в коде? – user2915058

+0

@ user2915058 - вы абсолютно правы, мои извинения. Код обновляется выше (строка 'return propValue == value' изменена на' return propValue'). Похоже на то, что с моей стороны случился несчастный случай с копией-пастой :) –

+0

Еще не то, что я имел в виду, может быть, это плохо с моей стороны, позвольте мне объяснить: prop, в строке (var prop = object1.GetType(). GetProperty (field) ;) равно null, даже если я правильно задал имя поля. object1 определения: общественный статический класс DB { общественный класс IFCArray { общественной строка globalID; public string Element_Type; имя публичной строки; etc ... так что даже если я положил prop = object1.GetType(). GetProperty ("name"); он возвращает prop как null, В чем проблема? – user2915058

0

Я думаю, что ошибка отображается из-за ошибки типа в заявлении if (object1.field == value). использовать отражение, чтобы получить тип поля и сравнить значение в соответствии с типом.

Надеюсь, что это поможет, Спасибо.

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