Именованные / необязательные параметры в C # 3.0?

StackOverflow https://stackoverflow.com/questions/622880

  •  05-07-2019
  •  | 
  •  

Вопрос

Есть ли способ добавить необязательные параметры в 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top