gpt4 book ai didi

c# - 属性 getter/setter 的方法命名是否在 IL 中标准化?

转载 作者:太空狗 更新时间:2023-10-29 17:40:21 28 4
gpt4 key购买 nike

我有以下两种方法,不知是否合适:

public bool IsGetter(MethodInfo method)
{
return method.IsSpecialName
&& method.Name.StartsWith("get_", StringComparison.Ordinal);
}

public bool IsSetter(MethodInfo method)
{
return method.IsSpecialName
&& method.Name.StartsWith("set_", StringComparison.Ordinal);
}

虽然此代码有效,但我希望避免检查 StartsWith 并以编程方式获取命名约定的部分。基本上,是否有任何 .NET 4.5 类能够查看 MethodInfo 是否为属性 getter/setter?

最佳答案

与普通方法相比,属性方法具有三个额外的特征:

  1. 它们总是以 get_set_ 开头,而普通方法可以以这些前缀开头。
  2. 属性 MethodInfo.IsSpecialName 设置为 true。
  3. MethodInfo 具有自定义属性 System.Runtime.CompilerServices.CompilerGeneratedAttribute

您可以检查 1,并结合选项 2 或 3。由于前缀是标准的,因此您不必担心检查它。

另一种方法是枚举所有属性并匹配方法,这样会慢很多:

public bool IsGetter(MethodInfo method)
{
if (!method.IsSpecialName)
return false; // Easy and fast way out.
return method.DeclaringType
.GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
.Any(p => p.GetGetMethod() == method);
}

关于c# - 属性 getter/setter 的方法命名是否在 IL 中标准化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16718772/

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