Как написать метод С#, который принимает переменное количество аргументов?
Можно ли отправить переменное количество аргументов в метод?
Например, если я хочу написать метод, который объединил бы многие объекты string[]
в одну строку, но я хотел, чтобы он мог принимать аргументы, не зная, сколько я хотел бы пройти, как бы это сделать
Ответы
Ответ 1
Вы сделали бы это как:
string ConcatString(params string[] arguments)
{
// Do work here
}
Это можно назвать:
string result = ConcatString("Foo", "Bar", "Baz");
Подробнее см. params (С# Reference).
FYI - уже существует String.Concat(params object[] args)
- он будет конкатенировать любой набор объектов, вызвав ToString() для каждого. Поэтому для этого конкретного примера это, вероятно, не очень полезно.
Ответ 2
Используйте ключевое слово params
, чтобы сделать это:
public static string ConvertToOneString(params string[] list)
{
string result = String.Empty;
for ( int i = 0 ; i < list.Length ; i++ )
{
result += list[i];
}
return result;
}
Использование:
string s = "hello"
string a = "world"
string result = ConvertToOneString(s, a);
Ответ 3
Вы можете легко создать метод, который принимает произвольное количество аргументов (включая ноль), используя params
ключевое слово:
public static void UseParams(params int[] list)
{
for (int i = 0; i < list.Length; i++)
Console.Write(list[i] + " ");
}
Вы даже можете передать массив этому методу вместо списка параметров, и метод будет работать точно так же.
Ответ 4
очень легко сделать это, используя params keyword
void ConcatString(params String[] strArray)
{
foreach (String s in strArray)
{
// do whatever you want with all the arguments here...
}
}
Ответ 5
да, вы можете использовать параметры для этого
Ответ 6
Используйте params
:
void YourMethod(params string[] infiniteArgs) { }
Ответ 7
string MyConcat(params string[] values)
{
var s = new StringBuilder();
foreach (var v in values)
s.Append(v);
return s.ToString();
}
Ответ 8
Вы не имеете в виду бесконечность (ответ на этот вопрос - нет), но вы имеете в виду "переменную". Вот ваш ответ (да): http://blogs.msdn.com/b/csharpfaq/archive/2004/08/05/209384.aspx
Ответ 9
На практике бесконечное - нет (например, имеется конечный объем доступной памяти).
Неизвестно во время разработки, да.
Классическим примером этого является то, как он обрабатывается в консольном приложении.
http://dotnetperls.com/main
http://msdn.microsoft.com/en-us/library/cb20e19t(VS.71).aspx