我有以下自定义属性,可以应用于属性:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class IdentifierAttribute : Attribute
{
}
字符串
举例来说:
public class MyClass
{
[Identifier()]
public string Name { get; set; }
public int SomeNumber { get; set; }
public string SomeOtherProperty { get; set; }
}
型
还有其他类,Identifier属性可以添加到不同类型的属性中:
public class MyOtherClass
{
public string Name { get; set; }
[Identifier()]
public int SomeNumber { get; set; }
public string SomeOtherProperty { get; set; }
}
型
然后,我需要能够在我的消费类中获得这些信息。举例来说:
public class TestClass<T>
{
public void GetIDForPassedInObject(T obj)
{
var type = obj.GetType();
//type.GetCustomAttributes(true)???
}
}
型
最好的办法是什么?我需要获取[Identifier()]字段的类型(int、string等...)和实际值,显然基于类型。
5条答案
按热度按时间kupeojn61#
类似于下面的,,这将只使用它经过的第一个属性,它有属性,当然你可以把它放在多个。
字符串
tkclm6bt2#
字符串
v09wglhw3#
有点晚了,但这里是我为枚举(也可以是任何对象)做的一些事情,并使用扩展获取description属性值(这可以是任何属性的泛型):
字符串
获取值:
型
支持我所有枚举的扩展:
型
bq8i3lrv4#
示例
我用一个属性acceptances参数和works一个属性扩展了您的示例
字符串
该属性应用于
Person
类上的,如下所示:型
溶液
我已经创建了下面的扩展函数,它是通用的,能够从类中读取所有属性和属性值。
型
现在在main方法中,如果我们写
型
我们可以按照下面的截图读取这些值。
的数据
ig9co6j15#
这里有一个更真实的例子。我们使用扩展方法并检查属性是否包含FieldMetaDataAttribute(源代码库中的一个自定义属性),该属性具有有效的Major和MinorVersion。一般感兴趣的是我们使用父类类型和GetProperties并检索PropertyInfo,然后在这种特殊情况下使用GetCustomAttribute检索属性FieldMetaDataAttribute的部分。使用这段代码启发如何更通用地检索自定义属性。当然,这可以被完善,以形成一个通用的方法来检索类示例的任何属性的给定属性。
字符串