在所有自定义属性的教程中,他们教我们如何创建和定义自定义属性,这只不过是关于类/方法的简单注释。 我试图找出如何在某些方法中从.NET中的那些自定义属性中读取。 例如:
[SomeCustomAttr(param1, param2)]
public void Method1()
{
read param1 from here
read param2 from here
}
有很棒的框架可以处理输入的数据。有没有人可以给我一些方向来解决这个问题?
答案 0 :(得分:4)
假设您引用的参数是自定义属性类的属性:
class Program
{
static void Main(string[] args) {
Test();
Console.Read();
}
[Custom(Foo = "yup", Bar = 42)]
static void Test() {
// Get the MethodBase for this method
var thismethod = MethodBase.GetCurrentMethod();
// Get all of the attributes that derive from CustomAttribute
var attrs = thismethod.GetCustomAttributes(typeof(CustomAttribute), true);
// Assume that there is just one of these attributes
var attr1 = (CustomAttribute)attrs.Single();
// Print the two properties of the attribute
Console.WriteLine("Foo = {0}, Bar = {1}", attr1.Foo, attr1.Bar);
}
}
class CustomAttribute : Attribute
{
public string Foo { get; set; }
public int Bar { get; set; }
}
请注意,属性有点特殊,因为它们可以使用命名参数(对应于公共属性名称),而无需声明任何构造函数。
答案 1 :(得分:0)
反射是获取属性的正确方法。
var TypeObj = typeof(Type1);
var MethodInfoObj = TypeObj.GetMethod("Method1");
// var AllAttributes= MethodInfoObj.GetCustomAttributes(true);
var Attributes = MethodInfoObj.GetCustomAttributes(typeof(SomeCustomAttr), true);
if (Attributes.Length > 0)
{
var AttributeObj = Attributes[0] as SomeCustomAttr;
var value_param1 = AttributeObj.param1 ;
}