【问题标题】:C# 3.5 Optional and DefaultValue for parametersC# 3.5 参数的可选和默认值
【发布时间】:2011-07-04 05:35:42
【问题描述】:

我正在使用 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 实际上可以做到这一点吗?我做错了吗?

【问题讨论】:

  • 同样的事情发生在我们身上。你有什么解决办法吗?

标签: c# .net .net-3.5


【解决方案1】:

可选参数是 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,但仍然会引发编译错误。 “参数不匹配”。
  • 我也在寻找一种方法来做到这一点,而不必按照旧的 skool 方式进行 - 看起来我可能不得不这样做!
  • 在项目属性中转到构建选项卡,高级并将语言设置为 C# 4.0。即使设置了 .NET 3.5 框架,它也应该可以工作。
  • 我尝试在VS2010中将框架版本设置为4 & 3.5,但是在VS2008中使用它仍然会抛出编译错误。 “参数不匹配”
  • 哦 - 你提到你在 VS2008 中使用它。它行不通。只有 VS2010 可以编译 C# 4.0 代码。这就是我在回答中写的。
【解决方案2】:

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,即框架版本。)

【讨论】:

    【解决方案3】:

    看看下面的 StackOverflow 线程: C# Optional Parameters in .net 3.5

    复制粘贴那里所说的所有内容都没有用,因为该线程几乎涵盖了所有内容。 祝你好运。

    【讨论】:

    • 是的,我确实看到了这个问题 - 不幸的是,我尝试在 VS2010 中将框架版本设置为 3.5,但它仍然会引发编译错误。 “参数不匹配”
    猜你喜欢
    • 2013-10-08
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多