2015-07-14 4 views
1

У меня есть класс следующим образом:Установка # Значение свойства C, когда вы знаете его имя класса (не имя свойства)

public class DummyReturnDto 
    { 
     public Set1ReturnDto Foo { get; set; } 
     public Set2ReturnDto Bar { get; set; } 

     public DummyReturnDto() 
     { 
      Set1 = new Set1ReturnDto(); 
      Set2 = new Set2ReturnDto(); 
     } 
    } 

где все свойства гарантированно иметь классы, как их типы и будут уникальными. Я хотел бы использовать отражение, чтобы установить значение для свойства, заданного определенным типом. Так что для Set1ReturnDto:

var propertyInfo = obj.GetType().GetProperty(Set1ReturnDto, ??????); 
propertyInfo.SetValue(obj, value, null); 

, а затем для Set2ReturnDto

var propertyInfo = obj.GetType().GetProperty(Set2ReturnDto, ??????); 
propertyInfo.SetValue(obj, value, null); 

EDIT:

Это часть необходимых знаний для выполнения требований к Generic approach to dealing with multiple result sets from EF stored procedure

+1

Вы уверены, что каждый тип встречается только один раз в вашем классе 'DummyReturnDto'? – HimBromBeere

+0

@ TheEdge Почему бы вам это хотеть? – atlaste

+0

Зачем использовать отражение для этого? Не можете ли вы просто сохранить внутренний словарь от типа к экземпляру и заставить геттеры и сеттеры делегировать этот словарь? Чего вы пытаетесь достичь? Отражение очень редко является решением. –

ответ

4

Это сделает это:

var propertyInfo = typeof(DummyReturnDto).GetProperties() 
         .Single(p => p.PropertyType == typeof(Set1ReturnDto)); 
+1

Предполагается, что каждый тип происходит только один раз внутри класса. Если это не желаемое поведение (которое не видно из tgread), вы можете соответствующим образом изменить '.Single'-часть. – HimBromBeere

+0

@HimBromBeere Вы правы, я основывал свое решение на «гарантировано, что классы будут их типами и будут уникальными» :) – Rob

+0

они гарантированно будут уникальными – TheEdge

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