gpt4 book ai didi

.net - Type.GetMethods 的 BindingFlags 不包括属性访问器

转载 作者:行者123 更新时间:2023-12-03 14:52:57 24 4
gpt4 key购买 nike

假设我有以下程序:

namespace ReflectionTest
{
public class Example
{
private string field;

public void MethodOne() { }

public void MethodTwo() { }

public string Property
{
get { return field; }
set { this.field = value; }
}
}

class Program
{
static void Main(string[] args)
{
iterate(typeof(Example));

Console.ReadLine();
}

public static void iterate(Type type)
{
MethodInfo[] methods = type.GetMethods(
BindingFlags.DeclaredOnly |
BindingFlags.Instance |
BindingFlags.Public);

foreach (MethodInfo mi in methods)
{
Console.WriteLine(mi.Name);
}
}
}
}
当我运行程序时,我得到以下输出:
MethodOneMethodTwoget_Propertyset_Property

I want to skip the property accesor methods. I've tried with different BindingFlags, for instance, ~BindingFlags.SetProperty, but with no luck. At the moment the only way I've found to skip those methods is rewriting the iterate function to:

public static void iterate(Type type)
{
MethodInfo[] methods = type.GetMethods(
BindingFlags.DeclaredOnly |
BindingFlags.Instance |
BindingFlags.Public);

foreach (MethodInfo mi in methods)
{
if (mi.IsSpecialName) continue;
Console.WriteLine(mi.Name);
}
}
你知道吗 BindingFlags我应该使用吗?
更新:
好吧,我应该解释一下,该项目实际上是为单元测试自动构建模板,因此我可以跳过所有特殊方法。感谢您提供有关 IsSpecialName 的其他信息 :)
林克?真的吗?哇。无论如何,这个项目是 .NET 2.0,所以 LINQ(遗憾的是)不是一个选择。

最佳答案

从我的头顶:

mi.IsSpecialName &&( mi.Name.StartsWith("set_") || mi.Name.StartsWith("get_"))

应该让你一切准备就绪。
SpecialName 不仅仅是属性访问器(事件添加/删除方法在这里也算在内),这就是您必须检查名称的原因。

您也可以为此使用 LINQ :)

关于.net - Type.GetMethods 的 BindingFlags 不包括属性访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/234330/

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