.NET 中的反射

Posted

技术标签:

【中文标题】.NET 中的反射【英文标题】:Reflection in .NET 【发布时间】:2021-11-15 08:24:24 【问题描述】:
class Program

    static void Main(string[] args)
    
        Type doub = typeof(Doub);
        object result = doub.InvokeMember("Call", BindingFlags.InvokeMethod, null, null, new object[]  );
    


public class Doub

    public Collection<string> Call()
    
        Collection<string> collection = new Collection<string>();
        return collection;
    

    public Collection<T> Call<T>()
    
        Collection<T> collection = new Collection<T>();
        return collection;
    

我尝试调用 Call 方法,但程序无法确定调用哪个方法。错误:(System.Reflection.AmbiguousMatchException: "Ambiguous match found)。如何准确调用类的 Call() 方法?

【问题讨论】:

docs.microsoft.com/en-us/troubleshoot/dotnet/framework/… 【参考方案1】:

您需要使用不同的方式来获取要执行的方法。例如,Type 对象有一个名为 GetMethod 的方法具有各种重载,您可以使用允许您 specify how many generic parameters the method has 的方法,例如:

Type doub = typeof(Doub);
var callMethod = doub.GetMethod("Call", 0, new Type[] );

// You need an instance of the object to call the method on
var x = new Doub();

var result = callMethod.Invoke(x, new object[] );

【讨论】:

这很好用dotnetfiddle.net/CIUKBm。 +1 它有效。谢谢

以上是关于.NET 中的反射的主要内容,如果未能解决你的问题,请参考以下文章

java中的反射

.NET中利用反射来实现自动映射两个对象中的数据成员

反射机制

.NET知识梳理——2.反射

详解C#中的反射

详解C#中的反射