当您知道C#属性的类名(而不是属性名)时设置其属性值

当您知道C#属性的类名(而不是属性名)时设置其属性值,c#,C#,我的课程如下: public class DummyReturnDto { public Set1ReturnDto Foo { get; set; } public Set2ReturnDto Bar { get; set; } public DummyReturnDto() { Set1 = new Set1ReturnDto(); Set2 = new Set2ReturnDto();

我的课程如下:

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

      public DummyReturnDto()
      {
          Set1 = new Set1ReturnDto();
          Set2 = new Set2ReturnDto();
      }
  }
其中所有属性都保证有类作为其类型,并且是唯一的。我想使用反射为给定特定类型的属性设置值。因此,对于设置1返回到

var propertyInfo = obj.GetType().GetProperty(Set1ReturnDto, ??????);
propertyInfo.SetValue(obj, value, null);
然后为设置2返回到

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

这是实现需求所需知识的一部分,这将实现:

var propertyInfo = typeof(DummyReturnDto).GetProperties()
                       .Single(p => p.PropertyType == typeof(Set1ReturnDto));
这可以做到:

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

你确定每种类型在你的类中只出现一次吗
DummyReturnDto
?@Edge你到底为什么要这样做?为什么要使用反射?你不能从一个类型到另一个实例保留一个内部字典,让getter和setter委托给这个字典吗?你想达到什么目标?反射很少是解决方案。@Vincent最终我将使用它向我的方法传递一个类列表。类(不是对象实例)的排序将是经过深思熟虑的,因为我需要从数据库返回的内容中提取多个结果集,并将它们映射到每个数据集。查看并最终查看我在原始帖子中发布的链接。在我看来,使用单个方法
SetProperty(Type t,object o)
创建一个接口,并在助手类中使用它,而不是泛型类型
t
(这样就不需要反射)
DummyReturnDto
应该通过拥有一个从
Type
object
的字典来实现该接口。所有的getter都执行类似于
Set1ReturnDto Foo{get{return(Set1ReturnDto)\ dict[typeof(Set1ReturnDto)];}}
的操作。这就解决了这个问题,对吗?你确定每种类型在你的类中只出现一次吗
DummyReturnDto
?@TheEdge你到底为什么要这样做?为什么要使用反射?你不能从一个类型到另一个实例保留一个内部字典,让getter和setter委托给这个字典吗?你想达到什么目标?反射很少是解决方案。@Vincent最终我将使用它向我的方法传递一个类列表。类(不是对象实例)的排序将是经过深思熟虑的,因为我需要从数据库返回的内容中提取多个结果集,并将它们映射到每个数据集。查看并最终查看我在原始帖子中发布的链接。在我看来,使用单个方法
SetProperty(Type t,object o)
创建一个接口,并在助手类中使用它,而不是泛型类型
t
(这样就不需要反射)
DummyReturnDto
应该通过拥有一个从
Type
object
的字典来实现该接口。所有的getter都执行类似于
Set1ReturnDto Foo{get{return(Set1ReturnDto)\ dict[typeof(Set1ReturnDto)];}}
的操作。这将解决这个问题,对吗?这假设每个类型在类中只出现一次。如果这不是期望的行为(tgread中没有明确说明),您可以相应地更改
。单个
-部分。@Himbrombeer如果您是对的,我基于
的解决方案保证将类作为其类型,并且将是唯一的
:)这假设每个类型在类中只出现一次。如果这不是期望的行为(tgread中没有明确说明),您可以相应地更改
。单个
-部分。@Himbrombeer如果您是对的,我基于
的解决方案保证将类作为其类型,并且将是唯一的
:)