Вы можете использовать анонимный тип и отражение в качестве обходного пути к именованным параметрам:
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(new { Message = "Hello World" });
... и он напишет мое сообщение.
В основном я извлекаю все свойства из переданного анонимного типа и преобразовываю их в словарь строк и объектов (имя свойства и его значение).