Именованные / необязательные параметры в C # 3.0?
Вопрос
Есть ли способ добавить необязательные параметры в C # 3.0, как это будет в C # 4.0?У меня должна быть эта функция, я просто не могу дождаться!
Редактировать:
Если вы знаете обходной путь для достижения этой цели, опубликуйте его также.Спасибо!
Решение
Вы можете использовать анонимный тип и отражение в качестве обходного пути для именованных параметров:
public void Foo<T>(T parameters)
{
var dict = typeof(T).GetProperties()
.ToDictionary(p => p.Name,
p => p.GetValue(parameters, null));
if (dict.ContainsKey("Message"))
{
Console.WriteLine(dict["Message"]);
}
}
Так что теперь я могу вызывать Foo вот так:
Foo(new { Message = "Hello World" });
...и на нем будет написано мое сообщение.
По сути, я извлекаю все свойства из анонимного типа, который был передан, и преобразую их в словарь строк и объектов (имя свойства и его значение).
Другие советы
Всегда есть перегрузка метода.:)
К сожалению, нет.Для поддержки этого вам понадобится компилятор C # 4.0.Если вам нужны дополнительные параметры на платформе .NET уже сегодня, вы можете попробовать VB .NET или F #.
Как сказал Дастин, необязательные параметры появятся в C # 4.0.Одним из дрянных способов имитации необязательных параметров было бы использование object [] (или более строго типизированного массива) в качестве последнего аргумента.
Можно также использовать переменные аргументы в качестве параметров опции.Примером того, как это работает, является string.Format().
Смотрите здесь:
http://blogs.msdn.com/csharpfaq/archive/2004/05/13/131493.aspx