【问题标题】:Why can't I use DateTime.MinValue and int.MinValue as optional values in C# 4.0?为什么我不能在 C# 4.0 中使用 DateTime.MinValue 和 int.MinValue 作为可选值?
【发布时间】:2010-11-03 18:03:43
【问题描述】:

有人可以解释以下使用 C# 4.0 编写的方法签名有什么问题吗?

public void Test(string arg1 = string.Empty, DateTime arg2 = DateTime.MinValue){}

我理解 "" 和 string.Empty 在编译时检查方面的区别,但是如果您不能声明一个合理的值类型 null 样式比较,那么在 C# 4.0 中实现可选参数的方式肯定是不够的?

【问题讨论】:

标签: c#-4.0 optional-parameters


【解决方案1】:

因为DateTime.MinValueDateTime.MaxValue 不是编译时间常数——它们是readonly 字段,在运行时由DateTime 的静态构造函数初始化。

查看const 字段(它们是编译时常量)和readonly 字段(不是)之间的区别:What is the difference between const and readonly?

【讨论】:

  • 蒂姆,对不起,我应该更清楚。我知道他们不是设计时间常数,但语言设计时间支持肯定应该能够动态考虑这种情况吗?
  • 可选参数要求您提供编译时常量。您必须询问语言设计人员为什么,但从根本上说,.NET 只支持一小组用于编译时常量的数据类型。
【解决方案2】:

您只能将字面值、常量值和新对象实例用作参数值。

【讨论】:

    猜你喜欢
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2012-08-27
    • 2015-09-03
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多