-1
 class Writer
{
   public void Write( int i )
    {
    }
   public  void Write(IList l) 
    {
        foreach ( var i in l )
        {
            Console.WriteLine(i.GetType());
            //Write( i );//CS1502
        }
    }

}
class Program
{
    static void Main(string[] args)
    {
        int[] array1 = { 1, 2, 3 };
        Writer t = new Writer();
        t.Write( array1 );
    }
}

打印var的类型是'System.Int32'和'System.String'。循环怎么了。任何人都可以帮助我。

4

5 回答 5

5

void Write(IList l)我想你想改成void Write(IList<int> l).

编辑

您还可以像这样添加泛型:

void Write<T>(IList<T> l)void Write<T>(T i)

于 2012-10-15T14:39:30.203 回答
2

void Write(IList l)改为将签名更改为void Write(IList<int> l)

它无法编译的原因是因为IList它不是通用的,因此列表中项目的类型是object但是没有Write接受object.

通过更改Write您的签名告诉编译器您列表中的项目实际上是int,因此它解析为正确的重载。

或者更改您的void Write(int i)方法以改为使用签名void Write(object o)

于 2012-10-15T14:39:36.880 回答
0

GetType 打印变量对象的类型。我假设您只想要价值?

Console.WriteLine(i);
于 2012-10-15T14:40:37.057 回答
0

var不是动态,底层类型是在编译时定义的。

阅读dynamic关键字,或者只使用IEnumerable<int>.

于 2012-10-15T14:40:51.107 回答
0

你为什么不只使用foreach(l中的对象i)?var 在这个追逐中没有任何好处。如果你们都有一个具有一种类型的列表,请使用像“Daniel A. White”这样的泛型。

如果您想使用具有多种类型的列表,请保留我们的方法,但将 var 替换为 object,获取当前对象的类型并根据需要编写字符串。

于 2012-10-15T15:13:17.040 回答