根据另一个对象的反射设置 属性 类型
Set property type based on reflection of another object
假设我有两个 classes:
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;}
}
我希望能够制作一个这样的容器 class:
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>();
我更愿意通过推断来设置该类型。我知道如何通过获取属性从 class 中找到正确的 属性 类型,我不确定的是如何设置我的容器 class.
属性 的类型需要在编译时知道。
public [the type of the objects key] ForeignKey {get;set;}
无法在编译时设置[the type of the objects key]
。
但是,您可以有一些选择:
- 使用'object'
- 创建多个类型并使用一个工厂来检查密钥的类型并使用它。
- 对所有
ObjectViewModel
对象使用字符串 - 将 int 键字符串化
假设我有两个 classes:
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;}
}
我希望能够制作一个这样的容器 class:
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>();
我更愿意通过推断来设置该类型。我知道如何通过获取属性从 class 中找到正确的 属性 类型,我不确定的是如何设置我的容器 class.
属性 的类型需要在编译时知道。
public [the type of the objects key] ForeignKey {get;set;}
无法在编译时设置[the type of the objects key]
。
但是,您可以有一些选择:
- 使用'object'
- 创建多个类型并使用一个工厂来检查密钥的类型并使用它。
- 对所有
ObjectViewModel
对象使用字符串 - 将 int 键字符串化