首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取属性参数值

提取属性参数值
EN

Stack Overflow用户
提问于 2015-01-09 13:48:12
回答 1查看 148关注 0票数 2

我可以从NUnit测试类库程序集中检索所有测试名称,但还需要从传递给Category属性的参数中检索它们的类别名称。

例如:

代码语言:javascript
复制
[Category("text")] 
public void test() {}

我需要从动态链接库拿到"text"

EN

回答 1

Stack Overflow用户

发布于 2015-01-09 16:31:23

使用反射。

例如:

假设此属性应用于字段:

代码语言:javascript
复制
<AttributeUsage(AttributeTargets.Field)> _
     Public NotInheritable Class DataBaseValueAttribute
    Inherits Attribute

    Private _value As Object

    Public Sub New(ByVal value As Object)
      _value = value
    End Sub

    Public Function GetValue() As Object
      Return _value
    End Function
  End Class

您可以使用反射从类型中获取字段信息并获取属性:

代码语言:javascript
复制
Dim tipo As Type = GetType(YourType)
Dim fi As FieldInfo = tipo.GetField("fieldName")

Dim attribs As Atributos.DataBaseValueAttribute() = CType(fi.GetCustomAttributes(GetType(Atributos.DataBaseValueAttribute), False), Atributos.DataBaseValueAttribute())
If attribs.Count > 0 Then
   Return attribs(0).GetValue()
Else
   Return Nothing
End If

在c#中:

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.Field)]
public sealed class DataBaseValueAttribute : Attribute
{
    private object _value;
    public DataBaseValueAttribute(object value)
    {
        _value = value;
    }

    public object GetValue()
    {
        return _value;
    }
}

Type tipo = typeof(YourType);
FieldInfo fi = tipo.GetField("fieldName");

Atributos.DataBaseValueAttribute[] attribs = (Atributos.DataBaseValueAttribute[])fi.GetCustomAttributes(typeof(Atributos.DataBaseValueAttribute), false);
if (attribs.Count > 0) {
    return attribs(0).GetValue();
} else {
    return null;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27854580

复制
相关文章

相似问题

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