2011-12-14 16 views
3

なぜオプション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); 
     } 
    } 

答えて

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); 
      } 
     } 
+0

他の返事は私がやっているばかげたことを指しているので正しいですが、これは本当にやりたいことです。ありがとうございました –

+1

時にはその男が起こる... –

14

List<T>.Addvoidが返されます。あなたのコードは、これが失敗するのと同じように失敗します。

List<string> list = new List<string>().Add("This wouldn't work"); 

はしかし、コレクション初期化子で救助にC#3:List<T>.Add()方法は、あなたの要素を返さないため

SomeMethod(new List<string> { "Woot!" }); 
3

はそれですちょうどリストに追加されました。 voidを返します。

しかし、あなたはこれを行うことができます:

SomeMethod(new List<string>(new[] { "This compiles fine" })); 

またはコレクション初期化子の構文を使用します。

SomeMethod(new List<string> { "This compiles fine" }); 

、あなたが複数の要素たい場合:

SomeMethod(new List<string> { "elem1", "elem2", "elem3" }); 
1
new List<string>().Add("This give compilation Error") 

戻りボイドをしかし方法はSomeMethodList<string>

1

List<T>.Add(T someItem)は、操作の結果として、リストへの参照を返しません、あなたの最初のオプションでは、あなたは、SomeMethod()からAdd()メソッドの戻り値を渡していないされているので、それは

0

voidを返す期待してい実際のList<string>オブジェクトです。

1

List.Addvoidを返します。これがSomeMethodに渡されます。明らかにそれはうまくいかないでしょう。

5

.Add()はListではなくvoid型を返すためです。ただし、それは無効だ、この

SomeMethod(new List<string>() { "This give compilation Error" }); 
0

私の知る限り、int型を返さないジェネリックリストの追加()メソッドを行うことができます。

2

Addメソッドは何も返さないため、このエラーを参照してください。このお試しください

SomeMethod(new List<string>(){"This won't give compilation Error"}); 
1
SomeMethod(new List<string>() {"This give compilation Error"}); 
+0

をDewasish提案する。 –

関連する問題