使用类型的名称参数进行搜索.GetMember方法

本文关键字:搜索 GetMember 方法 参数 类型 | 更新日期: 2023-09-27 18:15:59

我目前知道,所有方法的第一个参数重载的类型。GetMember方法:

<我>名称
,,,类型:系统。字符串
  &nbsp会员得到。

是区分大小写的,它允许通过匹配进行搜索:

  1. 确切成员名

    Type myType = myString.GetType();
    // Get the members for myString which are named Compare.
    MemberInfo[] myMembers = myType.GetMember("Compare");
    
  2. 所有以给定值开始的成员名,通过使用*通配符

    Type myType = myString.GetType();
    // Get the members for myString starting with the letter C.
    MemberInfo[] myMembers = myType.GetMember("C*");
    // Get the members for myString starting with the string Comp.
    myMembers = myType.GetMember("Comp*");
    

如果只使用*作为参数值,甚至可以获得所有可用的成员。

我的问题是:除了上面的两种方法,是否有可能有一些其他类型的字符串模式来匹配成员(例如C*eCompar? ?)

使用类型的名称参数进行搜索.GetMember方法

不,. net框架代码不包含任何其他通配符的处理。

GetMember内部使用的System.RuntimeType.FilterHelper代码:

// System.RuntimeType
private static void FilterHelper(BindingFlags bindingFlags, ref string name, bool allowPrefixLookup, out bool prefixLookup, out bool ignoreCase, out RuntimeType.MemberListType listType)
{
    prefixLookup = false;
    ignoreCase = false;
    if (name != null)
    {
        if ((bindingFlags & BindingFlags.IgnoreCase) != BindingFlags.Default)
        {
            name = name.ToLower(CultureInfo.InvariantCulture);
            ignoreCase = true;
            listType = RuntimeType.MemberListType.CaseInsensitive;
        }
        else
        {
            listType = RuntimeType.MemberListType.CaseSensitive;
        }
        if (allowPrefixLookup && name.EndsWith("*", StringComparison.Ordinal))
        {
            name = name.Substring(0, name.Length - 1);
            prefixLookup = true;
            listType = RuntimeType.MemberListType.All;
            return;
        }
    }
    else
    {
        listType = RuntimeType.MemberListType.All;
    }
}