【发布时间】:2015-11-23 10:57:41
【问题描述】:
我共享了很大程度上依赖于自定义属性的验证逻辑,因此我需要检查每种类型的验证逻辑。
为每个验证订阅者获取一个实例(用于检查):
var instance = this.ValidationProvider.GetInstanceForSubscriber(validationSubscriber);
其中validationSubscriber 是具有这些值的枚举:
人, 检查
此时GetInstanceForSubscriber返回一个object类型的实例:
public object GetInstanceForSubscriber(ValidationSubscribers validationSubscriber)
{
switch (validationSubscriber)
{
case ValidationSubscribers.Person:
return new Person();
case ValidationSubscribers.Checks:
return new Checks();
default:
return null;
}
}
调用这个方法后,我检查类型:
var instanceType = instance.GetType();
然后,我阅读了(自定义)属性:
var attributes = propertyInfo.GetCustomAttributes(true);
然后,我返回一个 IEnumerable<PropertyAttribute> 列表,其中仅包含我的自定义属性,将验证规模限制在必要的范围内(仅供参考,因为与此问题不太相关)。
问题
由于instance 是对象类型,它不包含我的任何自定义属性(逻辑上),所以我需要将其转换为正确的类类型。
实现这一目标的最佳方法是什么?
【问题讨论】:
-
Enum 值和类名是否有完全匹配的名称?
-
你为什么认为它不包含你的属性?
-
@ShantanuGupta:不,我不赞成这样做,因为这可能/将会变得难以维护(而且非常不可信)。
-
@CSharpie:
var attributes = propertyInfo.GetCustomAttributes(true)行返回一个 0 项列表,而对于实际类型来说它工作得很好。这是有道理的,因为object没有我的自定义属性。 -
如果你使用 instance.GetType() 它不应该返回 typeof(object)