C# 3.5中参数的可选和默认值

20

我正在使用C# .net 3.5构建一个应用程序。我一直在使用 .net 4.0 中的可选参数属性,没有问题。我注意到在3.5中有一个选项(解决方法),可以向您的方法添加以下属性:

    public static void MethodName(string name, [Optional][DefaultValue(null)]string placeHolder)
    {

    }

即使我已经将属性添加到方法中,如果我这样调用它:

     MethodName("test");

编译器会抱怨它正在寻找两个参数而不是一个。在使用C# .net 3.5时,是否真的可以做到这一点?我做错了什么吗?


你们也遇到了同样的问题吗?你们找到解决方案了吗? - PrateekSaluja
3个回答

35

可选参数是 C# 4.0 的语言特性,因此您可以针对任何框架使用它,但必须使用 VS 2010 或更新版本进行编译。

在 VS 2010 或更新版本中,请使用以下语法:

public static void MethodName(string name, string placeHolder = null)
{
    // body
}

或者在旧版本中使用以下方式:

public static void MethodName(string name, string placeHolder)
{
    // body
}

public static void MethodName(string name)
{
    MethodName(name, null);
}

是的,我尝试在VS2010中将框架版本设置为3.5,但仍然会抛出编译错误。"参数不匹配"。 - Deano
我也在寻找一种方法来完成这个任务,而不必使用老式的方式——看起来我可能不得不这样做! - Deano
在项目属性中,转到“生成”选项卡,然后选择“高级”,将语言设置为C# 4.0。即使设置了.NET 3.5框架,这也应该可以工作。 - rotman
我尝试在VS2010中将框架版本设置为4和3.5,但是当我在VS2008中使用它时,仍然会抛出编译错误,提示"参数不匹配"。 - Deano
哦,你提到你在使用VS2008。它不能工作。只有VS2010才能编译C# 4.0代码。这就是我在我的回答中写的内容。 - rotman

6
Optional 属性自 C# 1.0 起可用,用于与外部代码进行交互,在您自己的代码中对方法调用没有影响。
由于 C# 3 中没有可选参数,因此可以使用重载代替:
public static void MethodName(string name, string placeHolder) {
  ...
}

public static void MethodName(string name) {
  MethodName(name, null);
}

(旁注:没有C# 3.5版本,那是一个框架版本。)

4
请看以下StackOverflow线程:C# Optional Parameters in .net 3.5 不必复制粘贴所有已经说过的内容,因为该线程已经涵盖了几乎所有内容。
祝好运。

是的,我看到了那个问题 - 不幸的是,我尝试在VS2010中将框架版本设置为3.5,但它仍然会抛出编译错误。"参数不匹配"。 - Deano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接