1

Type.GetMember Methodのすべてのメソッド オーバーロードの最初のパラメーターは次のとおりです。

名前
    型: System.String
    取得するパブリック メンバーの名前を含む文字列。

大文字と小文字が区別され、次の一致による検索が可能です。

  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*");
    

*パラメーター値としてのみ使用すると、使用可能なすべてのメンバーを取得することもできます。

私の質問は:上記の 2 つのアプローチに加えて、メンバーを一致させるための他のタイプの文字列パターン (またはなど) を使用することは可能ですC*eCompar??

4

1 に答える 1

2

いいえ、.NET Framework コードには、他のワイルドカードの処理は含まれていません。

そのコードはSystem.RuntimeType.FilterHelper、内部で次のように使用されGetMemberます。

// 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;
    }
}
于 2013-05-30T13:58:51.303 に答える