我怎么知道某个方法是否调用了在 c# 中具有特定属性的方法

星际玩家39
class SampleClass 
{
    [SampleAttribute]
    public void SampleMethod() 
    {
        
    }
}

如果有类似上面代码的方法。我怎么知道调用了具有特定属性的方法(在这种情况下,该属性是 'SampleAttribute')?我知道如何找到具有特定属性的方法。但我不知道如何确定何时调用具有特定属性的方法

弗拉迪斯拉夫·霍尔巴科夫

您可以通过几种方式做到这一点。但首先,让我们为 SampleAttribute 添加一些值,以确保一切正常:

[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
public class SampleAttribute : Attribute
{
    public SampleAttribute(string text)
    {
        Text = text;
    }

    public string Text { get; private set; }
}

并为方法指定属性值:

public class SampleClass
{
    [SampleAttribute("This is attribute text")]
    public void SampleMethod() { }
}

现在,使用反射机制,我们可以从对象中提取属性值:

var sampleClass = new SampleClass();
ExtractSampleAttributeValue(sampleClass);

private static string ExtractSampleAttributeValue(SampleClass sampleClass)
{
        var methods = sampleClass.GetType().GetMethods();
        var sampleMethod = methods.FirstOrDefault(method => method.Name == nameof(sampleClass.SampleMethod));
        var sampleAttribute = Attribute.GetCustomAttribute(sampleMethod, typeof(SampleAttribute)) as SampleAttribute;
        return sampleAttribute.Text;
}

或者甚至将方法作为参数传递:

var sampleClass = new SampleClass();
ExtractSampleAttributeValue(sampleClass.SampleMethod);

 private static string ExtractSampleAttributeValue(Action sampleMethod)
 {
        var sampleAttribute = Attribute.GetCustomAttribute(sampleMethod.Method, typeof(SampleAttribute)) as SampleAttribute;
        return sampleAttribute.Text;
 }
        

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我们怎么知道采用了某种方法?

测试RSpec中某个输入是否调用了存根方法

C ++:如何检查具有特定属性的对象是否存在于集合中

类对象属性可以调用返回该属性在C ++中应具有的值的方法吗?

我如何知道哪个线程调用了我的Log方法?

我怎么知道我是否应该通过索引或C#中的OrderedDictionary中的键访问值?

在树中搜索具有特定属性的节点并分配树的属性的有效方法

C ++知道是否调用了成员函数

我怎么知道我要读取的内存地址在C ++中是否为空?

我怎么知道我的HTTP端口请求是否在c#中工作?

在C#中同时具有特定参数和params方法重载的好处

如何检查具有特定签名的C#中存在的方法?

在C#中同时具有特定参数和params方法重载的好处

我怎么知道何时/何处调用超类的重写方法

是否有很好的方法知道某个方法是由父级调用还是从其他位置调用?

我可以知道调用JNI C方法的类的名称吗?

我怎么知道某些扩展方法是否使对象“突变”?

在Excel中,我怎么知道某个值是否存在于某个行中,然后突出显示它?

具有特定类型的List的C#扩展方法

具有类特定参数的C ++虚拟方法

每当在C#中调用某个方法时,是否有通用的方法来调用另一个方法

从Python的词典列表中创建具有特定属性作为键的新词典的简便方法

从列表中删除具有特定属性的对象的快速方法是什么

我怎么知道系统对特定命令的调用?

我是否正确调用了 Spotify API 的音频分析方法?

使用LINQ C#检查是否存在具有特定属性的XML节点

在Python中,有没有一种方法可以找到具有特定属性的对象?

c#,nUnit如何验证是否调用了另一个类的方法

如何使用 map 方法返回具有特定属性的列表