我怎样才能在foreach中传递'var'

时间:2012-10-15 14:38:10

标签: c# foreach var

 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'。与循环有关。 任何人都可以帮助我。

5 个答案:

答案 0 :(得分:5)

我认为您要将void Write(IList l)更改为void Write(IList<int> l)

修改

你也可以添加这样的泛型:

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

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:0)

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

Console.WriteLine(i);

答案 3 :(得分:0)

var 是动态的,基础类型是在编译时定义的。

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

答案 4 :(得分:0)

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

如果你想使用多种类型的列表保留我们的方法,但用对象替换var,获取当前对象的类型,并按照你想要的方式编写字符串。