2013-05-30 61 views
1

的名稱參數搜索目前我知道的所有方法重載爲Type.GetMember Method第一個參數:與Type.GetMember方法

       類型:System。字符串
       該字符串包含公共名稱爲 的成員。

是大小寫敏感的,它允許通過匹配搜索:

  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??)

回答

2

否,.NET框架代碼不包含任何其他通配符的處理。

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; 
    } 
} 
+0

尼斯,你有什麼參考/鏈接,這個方法定義是什麼? –

+0

它使用ILSpy從.NET 4.5源代碼中檢索 –