【发布时间】:2019-08-06 14:19:18
【问题描述】:
我正在寻找一种优雅的方式来将 DateTime.Now 的值设置为属性的值。
我有这个代码:
[MyValue(DateTime.Now)]
public DateTime? VertragDatum { get; set; }
但我收到一个语法错误并告诉我 Type DateTime 不是有效的属性参数类型。您知道如何实现这一目标吗?
我的实现:
public class MyValueAttribute : Attribute
{
public string MyValue { get; }
public MyValueAttribute(DateTime myValue)
{
MyValue = myValue.ToString();
}
}
【问题讨论】:
-
您希望何时设置该值?关于对象创建,类型初始化?在这里听起来像是一个 xy 问题。
-
请注意,
DateTime.Now将在 编译时 设置(例如6 Aug 2019 17:21:05)并在 运行时 读取(比如在14 Oct 2019 14:52:47)。你真的想要这样的行为吗? -
按照@dymanoid 所说的,唯一可以用作属性的构造函数参数的是常量表达式。 C# 没有常量或文字
DateTimes(与 VB 不同)。如果一直是DateTime.Now,可以在构造函数中设置。但是,DateTime.Now不仅不能在原处工作,而且没有 DateTime 表达式。 -
您可以潜在地创建一个“fody”编织器,以将当前日期时间作为字符串或某种基于 roslyn 的插件注入。我怀疑这超出了用户对这个问题的期望范围。
标签: c# attributes