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'。与循环有关。 任何人都可以帮助我。
答案 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,获取当前对象的类型,并按照你想要的方式编写字符串。