从String转换为List <string>并传递给一行中的方法</string>

时间:2011-08-12 18:46:22

标签: c# string

这可能有点不必要,但我在C#中寻找一种方法将String转换为List&lt;字符串&gt;并将其一次性传递给一个功能。

假设我有一个函数,它接受一个字符串列表并将它们吐出到控制台。

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

现在假设有一种情况我希望只有一个String传递给函数。这是我的问题:如何调用此方法只传递一个字符串而不事先将其放入列表中?我认为这会奏效:

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

但它在Visual Studio中被标记为''PrintStrings'的最佳重载匹配有一些无效的参数。任何建议都会很棒!

6 个答案:

答案 0 :(得分:3)

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

或者创建一个接受单个字符串的PrintStrings重载。

顺便说一句,我认为最好接受IEnumerable<String>而不是List<String>

答案 1 :(得分:1)

您可以使用params关键字来允许可变数量的参数:

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>,效果会降低。然而,解决这个问题的最好方法是创建一个接受单个string的重载并相应地对其进行操作:

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

最后,如果你想保留当前的签名而不是添加重载,你可以像新的List<string>那样调用方法:

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

答案 2 :(得分:1)

您可以创建一个重载方法:

public static void PrintStrings( string message )
{      
   //Do other things
}

答案 3 :(得分:1)

PrintStrings( new List<String>() {"myMessage"});

答案 4 :(得分: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 );
   }
}

答案 5 :(得分:0)

PrintStrings(new List<string>() { "mystring" })