2

鉴于以下,代码为什么我会得到重复的项目?

Type intType = typeof(Int32);
foreach(var v in intType.GetMethods())
Console.WriteLine(v.Name);

例如ToString()出现4次。

4

5 回答 5

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)} 
于 2013-03-21T14:57:58.153 回答
2

因为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)
于 2013-03-21T14:58:12.770 回答
2

原因是一个方法不仅仅是一个名字:

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 
于 2013-03-21T14:59:37.463 回答
1

可能是整个继承树。尝试传递BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnlyGetMethods.

于 2013-03-21T14:56:42.527 回答
1

那是因为它从 Struct Int32 返回 String 方法的所有重载

在此处输入图像描述

于 2013-03-21T15:06:51.037 回答