首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取方法的属性值

读取方法的属性值
EN

Stack Overflow用户
提问于 2010-03-22 22:52:37
回答 6查看 49.5K关注 0票数 72

我需要能够从我的方法中读取属性的值,我该怎么做呢?

代码语言:javascript
复制
[MyAttribute("Hello World")]
public void MyMethod()
{
    // Need to read the MyAttribute attribute and get its value
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-22 22:56:50

您需要在MethodBase对象上调用GetCustomAttributes函数。

获取MethodBase对象的最简单方法是调用MethodBase.GetCurrentMethod。(请注意,您应该添加[MethodImpl(MethodImplOptions.NoInlining)])

例如:

代码语言:javascript
复制
MethodBase method = MethodBase.GetCurrentMethod();
MyAttribute attr = (MyAttribute)method.GetCustomAttributes(typeof(MyAttribute), true)[0] ;
string value = attr.Value;    //Assumes that MyAttribute has a property called Value

您也可以手动获取MethodBase,如下所示:(这样会更快)

代码语言:javascript
复制
MethodBase method = typeof(MyClass).GetMethod("MyMethod");
票数 88
EN

Stack Overflow用户

发布于 2010-03-22 22:56:11

代码语言:javascript
复制
[MyAttribute("Hello World")]
public int MyMethod()
{
var myAttribute = GetType().GetMethod("MyMethod").GetCustomAttributes(true).OfType<MyAttribute>().FirstOrDefault();
}
票数 35
EN

Stack Overflow用户

发布于 2016-09-30 22:07:27

可用的答案大多是过时的。

这是当前的最佳实践:

代码语言:javascript
复制
class MyClass
{

  [MyAttribute("Hello World")]
  public void MyMethod()
  {
    var method = typeof(MyClass).GetRuntimeMethod(nameof(MyClass.MyMethod), new Type[]{});
    var attribute = method.GetCustomAttribute<MyAttribute>();
  }
}

这不需要强制转换,并且使用起来非常安全。

您还可以使用.GetCustomAttributes<T>来获取一种类型的所有属性。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2493143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档