根据其他对象的反射设置属性类型

时间:2018-07-25 23:59:53

标签: c# reflection custom-attributes

让我们说我有两节课:

public class IntKeyObject{
     public int Id {get;set;}
     [ForeignKey]
     public int ForeignKey {get;set;}
     public string SomeProperty {get;set;}
     ...
}
public class StringKeyObject{
     public string Id {get;set;}
     [ForeignKey]
     public string ForeignKey {get;set;}
     public string SomeOtherProperty {get;set;}
}

我希望能够制作一个这样的容器类:

public class ObjectViewModel<T>{
     public [the type of the objects key] ForeignKey {get;set;}
     public IEnumerable<T> MyList {get;set;}
}

我将其初始化如下:

new ObjectViewModel<IntKeyObject>();

是否可以在对象类型上使用反射来设置我的ForeignKey属性类型? 现在,我知道如何做的唯一方法是通过显式传递Key类型,如下所示:

new ObjectViewModel<IntKeyObject, int>();
new ObjectViewModel<StringKeyObject, string>();

我希望通过推理来设置该类型。我知道如何通过获取属性从类中找到正确的属性类型,我不确定如何设置容器类。

1 个答案:

答案 0 :(得分:2)

需要在编译时知道属性的类型。

 public [the type of the objects key] ForeignKey {get;set;}

无法在编译时设置[the type of the objects key]

但是,您可以选择以下选项:

  1. 使用“对象”
  2. 创建多个类型并使用工厂来检查密钥的类型并使用该类型。
  3. 对所有ObjectViewModel对象使用字符串-将int键字符串化