这可能有点不必要,但我在C#中寻找一种方法将String转换为List<字符串>并将其一次性传递给一个功能。
假设我有一个函数,它接受一个字符串列表并将它们吐出到控制台。
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'的最佳重载匹配有一些无效的参数。任何建议都会很棒!
答案 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" })