преобразовать строку в список <String>и передать в метод в одну строку - PullRequest
0 голосов
/ 12 августа 2011

Это может быть немного ненужно, но я ищу способ в C # преобразовать строку в список и передать ее функции все сразу.

Допустим, у меня естьфункция, которая берет список строк и выплевывает их на консоль.

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

Теперь предположим, что есть случай, когда я хочу, чтобы в функцию была передана только одна строка.Это мой вопрос: как я могу вызвать этот метод, передавая только одну строку без предварительной записи в список?Я думал, что это сработало бы:

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

Но в Visual Studio оно помечено как «Наилучшее перегруженное совпадение для« PrintStrings »имеет недопустимые аргументы.Любые предложения будут великолепны!

Ответы [ 6 ]

3 голосов
/ 12 августа 2011

Попробуйте PrintStrings (new List<String>(new string[]{"String"}));

Или создайте перегрузку PrintStrings, которая принимает одну строку.

Кстати, я думаю, что лучше принять IEnumerable<String>, а не List<String>

1 голос
/ 12 августа 2011
PrintStrings( new List<String>() {"myMessage"});
1 голос
/ 12 августа 2011

Вы можете просто создать перегруженный метод:

public static void PrintStrings( string message )
{      
   //Do other things
}
1 голос
/ 12 августа 2011

Вы можете использовать ключевое слово 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 });
0 голосов
/ 12 августа 2011
PrintStrings(new List<string>() { "mystring" })
0 голосов
/ 12 августа 2011
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 );
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...