Я написал простую программу, используя ключевое слово params
, чтобы взять параметры и записать их на консоль. Что я хочу/ожидаю, и что произойдет C# documentation states, когда я передаю один массив параметру с тегом params
, так это то, что массив станет первым элементом массива params
. Вот некоторые примеры кода:params ключевое слово принимает массив как один параметр интерпретирует содержимое массива как все его параметры
public static void Main()
{
Paramtest(new object[] { "hi", "wow", 78 });
Console.ReadKey();
}
public static void Paramtest(params object[] args) {
foreach (object o in args) {
Console.WriteLine("{0} is a type of {1}.", o.ToString(), o.GetType());
}
}
Что я должен см это одна строка письма на консоли, которая гласит:
System.object[] is a type of System.object[].
Что делать вижу, это три линии письма:
hi is a type of System.String.
wow is a type of System.String.
78 is a type of System.Int32.
Я обнаружил, что вызывает Paramtest
с другим параметром после массив, например: Paramtest(new object[] { "hi", "wow", 78 }, String.Empty);
, дает ожидаемые результаты (плюс пустая строка), так что это может быть один из способов обойти эту проблему, однако в моем случае это не изящно и не очень хорошо. Из того, что говорится в документации, этого не должно происходить. Есть ли элегантный обходной путь для решения этой проблемы?
Возможный дубликат [C# Params очевидно ошибка компилятора (C# 5.0)] (http://stackoverflow.com/questions/9709642/c-sharp-params -apparent-compiler-bug-c-5-0) –
Да, я думаю, это :( К сожалению, я не видел этого сообщения, когда делал свое исследование, прежде чем публиковать свой вопрос. –