有没有办法将可选参数添加到C#3.0中,就像在C#4.0中一样?我必须有这个功能,我等不及了!
修改
如果您知道解决方法/黑客来完成此任务,请将其发布。谢谢!
答案 0 :(得分:13)
您可以使用匿名类型和反射作为命名参数的变通方法:
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" });
...它会写下我的信息。
基本上我从传递的匿名类型中提取所有属性,并将它们转换为字符串和对象的字典(属性的名称及其值)。
答案 1 :(得分:9)
总是有方法重载。 :)
答案 2 :(得分:8)
不幸的是,没有。您将需要C#4.0编译器来支持此功能。如果您今天想在.NET平台上使用可选参数,可以尝试使用VB .NET或F#。
答案 3 :(得分:4)
就像Dustin所说,可选参数来自C#4.0。模拟可选参数的一种蹩脚方法是将object [](或更强类型的数组)作为最后一个参数。
答案 4 :(得分:2)
还可以使用变量参数作为选项参数。这种方式的一个例子是string.Format()。
见这里:
http://blogs.msdn.com/csharpfaq/archive/2004/05/13/131493.aspx