c# - 在 C# 上为属性设置默认值

标签 c#

<分区>

Possible Duplicate:
Setting the default value of a DateTime Property to DateTime.Now inside the System.ComponentModel Default Value Attrbute

我正在创建一个类似日历的控件,我希望用户设置他们想要查看的年份。 但如果他们不这样做,则 SelectedYear 的属性必须是实际年份。

我试着像这样设置这个默认值:

[DefaultValue(DateTime.Today.Year)]
public int SelectedYear{
    get{
        return _selYear;
    }
    set{
        _selYear = value;
        UpdateCalendar();
    }
}

我得到了以下错误

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

最佳答案

DateTimeYear 属性是一个计算值,但您试图将其嵌入到一个属性中,该属性是存储在二进制文件中的不可变值。这两个概念不兼容。

你想在这里做的是有一个标记来注意该值尚未设置,并在这种情况下返回当前的 Year。这是使用可空值的好地方

int? _selYear;
public int SelectedYear {
  get { return _selYear ?? DateTime.Today.Year; }
  set { 
    _selYear = value;
    UpdateCalendar();
  }
}

关于c# - 在 C# 上为属性设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13054056/

相关文章:

c# - EF 核心 : How to reuse same expression in different query contexts

c# - TSQL - 选择插入的行

c# - _ = WriteItems(channel.Writer, count, delay); 中下划线的含义是什么?

c# - 将功能分为验证和实现?为什么?

c# - for循环中事件处理程序的匿名方法

javascript - onserverclick 事件在 C# 中使用 html 生成器不起作用

c# - 嵌套具有字段优先级的查询和过滤查询

c# - 静态方法与实例方法的性能

c# - 在读取页面源代码时,如何知道将使用 POST 发送哪些参数?

c# - C# 7 中 "throw"表达式的编译时类型是什么?