2011-08-12 17 views
0

少し不必要かもしれませんが、C#でStringをリスト< Stringに変換してすべての関数に渡す方法を探しています。ワンショット。<String>をStringに変換してメソッドに渡します。

私は、文字列のリストを取得し、それらをコンソールに吐き出す関数を持っているとしましょう。

public static void PrintStrings(List<String> messages) 
{ 
    foreach (String message in messages) 
    { 
     Console.WriteLine(message); 
    } 
    //Do other things 
} 

は今、私は関数に渡された1つの文字列のみを持つようにしたい場合があると仮定します。これは私の質問です:どのように私はこのメソッドは、事前にリストに入れないで1つだけの文字列を渡すことができますか?

PrintStrings(Convert.ToString("mymessage").ToList()); 

をしかしPrintStrings 『「のための最良のオーバーロードされた試合は』いくつかの無効な引数を持っているとして、それは、Visual Studioでフラグが立てられている:私はこれが働いているだろうと思いました。どんな提案も素晴らしいだろう!あなたは、引数の数が可変できるようにparamsキーワードを使用することができます

+0

既存のPrintStringsメソッドを変更したり、オーバーロードされたメソッドを作成したりすることができると仮定して、多くの回答があります。 clairificationを提供したいことがあります。 – deepee1

+0

"foo" .ToList()がリストを生成するため、コンパイルエラーが発生します iamkrillin

+0

PrintStringsメソッドの変更には反対しません。最小の回答を探していれば、文字列を直接渡すことができます。 – WienerDog

答えて

1

:今

public static void PrintStrings(params string[] messages) 
{ 
    foreach (String message in messages) 
    { 
     Console.WriteLine(message); 
    } 
    //Do other things 
} 

を、あなたはstringの配列、単一string、あるいは複数のstringのいずれかを渡すことができます

PrintStrings("hi"); 
PrintStrings("hi", "there"); 
PrintStrings(stringList.ToArray()); 

既にList<string>がある場合、これは効率が悪くなることに注意してください。最良の方法は、それを回避するために、しかし、1つだけstringを受け入れるオーバーロードを作成し、それに応じてそれを操作することです:

public static void PrintStrings(string myString) { ... } 

を最後に、あなたがオーバーロードを追加するには、現在の署名を維持しないようにしたい場合は、あなたはそうのような新しいList<string>のメソッドを呼び出すことができます。

PrintStrings(new List<string>() { myString }); 
3

PrintStrings (new List<String>(new string[]{"String"}));

を試してみてくださいまたは単一の文字列を受け入れPrintStringsのオーバーロードを作成します。

ところで、私はそれはあなただけのオーバーロードされたメソッド作成することができますではなく、その後List<String>

1

IEnumerable<String>を受け入れるために、より良いことだと思う:

public static void PrintStrings(string message) 
{  
    //Do other things 
} 
0
PrintStrings((new string[] { "myMessage" }).ToList()); 

編集 - または多分過負荷、すなわち操作を行います。

PrintStrings("myMessage" ); 

public static void PrintStrings(string message) 
{ 
    AcutallyDoSomething(message); 
} 
public static void PrintStrings(List<String> messages) 
{ 
    foreach (String message in messages) 
    { 
     AcutallyDoSomething(message); 
    } 
    //Do other things 
} 

private static void AcutallyDoSomething(string msg) 
{ 
    foreach (String message in messages) 
    { 
     Console.WriteLine(message); 
    } 
} 
1
PrintStrings(new List<String>() {"myMessage"}); 
0
PrintStrings(new List<string>() { "mystring" }) 
関連する問題