使用类型的名称参数进行搜索.GetMember方法
本文关键字:搜索 GetMember 方法 参数 类型 | 更新日期: 2023-09-27 18:15:59
我目前知道,所有方法的第一个参数重载的类型。GetMember方法:
- <我>名称 我>
- ,,,类型:系统。字符串
 会员得到。
是区分大小写的,它允许通过匹配进行搜索:
-
确切成员名
Type myType = myString.GetType(); // Get the members for myString which are named Compare. MemberInfo[] myMembers = myType.GetMember("Compare");
-
所有以给定值开始的成员名,通过使用
*
通配符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*e
或Compar?
?)
不,. 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;
}
}