【发布时间】:2009-03-08 01:42:01
【问题描述】:
有没有办法像 C# 4.0 一样向 C# 3.0 添加可选参数?我得有这个功能,我等不及了!
编辑:
如果您知道实现此目的的解决方法/技巧,请将其发布。谢谢!
【问题讨论】:
有没有办法像 C# 4.0 一样向 C# 3.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#。
【讨论】:
正如 Dustin 所说,可选参数将出现在 C# 4.0 中。一种模拟可选参数的糟糕方法是将 object[](或更强类型的数组)作为最后一个参数。
【讨论】:
也可以使用可变参数作为选项参数。其工作方式的一个示例是 string.Format()。
看这里:
http://blogs.msdn.com/csharpfaq/archive/2004/05/13/131493.aspx
【讨论】: