鉴于以下,代码为什么我会得到重复的项目?
Type intType = typeof(Int32);
foreach(var v in intType.GetMethods())
Console.WriteLine(v.Name);
例如ToString()
出现4次。
鉴于以下,代码为什么我会得到重复的项目?
Type intType = typeof(Int32);
foreach(var v in intType.GetMethods())
Console.WriteLine(v.Name);
例如ToString()
出现4次。
因为Int32.ToString() 有四个重载。通过设置断点并检查intType.GetMethods()
结果,您可以轻松地看到这一点,您将在其中看到(以及其他):
[5] {System.String ToString()}
[6] {System.String ToString(System.String)}
[7] {System.String ToString(System.IFormatProvider)}
[8] {System.String ToString(System.String, System.IFormatProvider)}
因为Type.GetMethods()
返回此类型的所有重载方法。
Int32.ToString()
方法有 4 个重载,所以...
System.String ToString()
System.String ToString(System.String)
System.String ToString(System.IFormatProvider)
System.String ToString(System.String, System.IFormatProvider)
原因是一个方法不仅仅是一个名字:
Type intType = typeof(Int32);
foreach(var v in intType.GetMethods())
Console.WriteLine(v.Name + " " +
(v.IsStatic? "static " : "") +
string.Join(", ", v.GetParameters()
.Select(p => p.ParameterType.Name + " " + p.Name)));
将打印
CompareTo Object value
CompareTo Int32 value
Equals Object obj
Equals Int32 obj
GetHashCode
ToString
ToString String format
ToString IFormatProvider provider
ToString String format, IFormatProvider provider
Parse static String s
Parse static String s, NumberStyles style
Parse static String s, IFormatProvider provider
Parse static String s, NumberStyles style, IFormatProvider provider
TryParse static String s, Int32& result
TryParse static String s, NumberStyles style, IFormatProvider provider, Int32& result
GetTypeCode
GetType
可能是整个继承树。尝试传递BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly
给GetMethods
.
那是因为它从 Struct Int32 返回 String 方法的所有重载