为什么我不能使用下面的选项#1。选项2工作正常
class Program
{
static void Main()
{
//Option 1
//Error 1 The best overloaded method match for 'ConsoleApplication2.Program.SomeMethod(System.Collections.Generic.List<string>)' has some invalid argument
//Error 2 Argument 1: cannot convert from 'void' to 'System.Collections.Generic.List<string>'
SomeMethod(new List<string>().Add("This give compilation Error"));
//Option 2
List<string> MyMessages = new List<string>();
MyMessages.Add("This compiles fine");
SomeMethod(MyMessages);
}
static void SomeMethod(List<string> Messages)
{
foreach (string Message in Messages)
Console.WriteLine(Message);
}
}
答案 0 :(得分:14)
List<T>.Add
返回void
。您的代码失败的方式与失败的方式相同:
List<string> list = new List<string>().Add("This wouldn't work");
然而,使用集合初始化程序进行救援的C#3:
SomeMethod(new List<string> { "Woot!" });
答案 1 :(得分:5)
因为.Add()返回void类型而不是List。但是你可以这样做
SomeMethod(new List<string>() { "This give compilation Error" });
答案 2 :(得分:4)
试试这个:
class Program
{
static void Main()
{
//There was a syntax error in your code. It should be declare like this
SomeMethod(new List<string>(){("This give compilation Error")});
//Option 2
List<string> MyMessages = new List<string>();
MyMessages.Add("This compiles fine");
SomeMethod(MyMessages);
}
static void SomeMethod(List<string> Messages)
{
foreach (string Message in Messages)
Console.WriteLine(Message);
}
}
答案 3 :(得分:3)
这是因为List<T>.Add()
方法不会返回刚刚添加到列表中的元素。它返回void。
但你可以这样做:
SomeMethod(new List<string>(new[] { "This compiles fine" }));
或使用集合初始化程序语法:
SomeMethod(new List<string> { "This compiles fine" });
如果你想要多个元素:
SomeMethod(new List<string> { "elem1", "elem2", "elem3" });
答案 4 :(得分:2)
您会看到此错误,因为Add方法不会返回任何内容。您可以将此行更改为:
SomeMethod(new List<string>(){"This won't give compilation Error"});
答案 5 :(得分:1)
new List<string>().Add("This give compilation Error")
返回void,但方法SomeMethod
需要List<string>
答案 6 :(得分:1)
List<T>.Add(T someItem)
没有返回对列表的引用,它返回void
答案 7 :(得分:1)
List.Add
会返回void
,这就是您传递给SomeMethod
的内容。显然这不起作用。
答案 8 :(得分:1)
因为Add方法返回类型是Void而您希望它返回collection.Check文档http://msdn.microsoft.com/en-us/library/3wcytfd1.aspx public void添加( T项目 )
答案 9 :(得分:1)
SomeMethod(new List<string>() {"This give compilation Error"});
答案 10 :(得分:0)
因为在您的第一个选项中,您将Add()
方法的返回值传递给SomeMethod()
,而不是实际的List<string>
对象。
答案 11 :(得分:0)
AFAIK,泛型List的Add()方法不返回int,它是void。