gpt4 book ai didi

.net - 如何在 .NET 中使用 GetMethod 区分通用签名和非通用签名?

转载 作者:行者123 更新时间:2023-12-02 13:44:24 25 4
gpt4 key购买 nike

假设存在如下所述的类X,如何获取非泛型方法的方法信息?下面的代码将抛出异常。

using System;

class Program {
static void Main(string[] args) {
var mi = Type.GetType("X").GetMethod("Y"); // Ambiguous match found.
Console.WriteLine(mi.ToString());
}
}

class X {
public void Y() {
Console.WriteLine("I want this one");
}
public void Y<T>() {
Console.WriteLine("Not this one");
}
}

最佳答案

不要使用GetMethod,使用GetMethods,然后检查IsGenericMethod

using System;
using System.Linq;

class Program
{
static void Main(string[] args)
{
var mi = Type.GetType("X").GetMethods().Where(method => method.Name == "Y");
Console.WriteLine(mi.First().Name + " generic? " + mi.First().IsGenericMethod);
Console.WriteLine(mi.Last().Name + " generic? " + mi.Last().IsGenericMethod);
}
}

class X
{
public void Y()
{
Console.WriteLine("I want this one");
}
public void Y<T>()
{
Console.WriteLine("Not this one");
}
}

作为奖励 - 扩展方法:

public static class TypeExtensions
{
public static MethodInfo GetMethod(this Type type, string name, bool generic)
{
if (type == null)
{
throw new ArgumentNullException("type");
}
if (String.IsNullOrEmpty(name))
{
throw new ArgumentNullException("name");
}
return type.GetMethods()
.FirstOrDefault(method => method.Name == name & method.IsGenericMethod == generic);
}
}

然后就:

static void Main(string[] args)
{
MethodInfo generic = Type.GetType("X").GetMethod("Y", true);
MethodInfo nonGeneric = Type.GetType("X").GetMethod("Y", false);
}

关于.net - 如何在 .NET 中使用 GetMethod 区分通用签名和非通用签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11566613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com