C# CustomAttribute:如何设置日期时间。现在

C# CustomAttribute:如何设置日期时间。现在,c#,attributes,C#,Attributes,我正在寻找一种优雅的方法来设置DateTime的值。现在作为属性的值 我有以下代码: [MyValue(DateTime.Now)] public DateTime? VertragDatum { get; set; } 但是我得到了一个语法错误,并告诉我DateTime类型不是有效的属性参数类型。你知道怎样才能做到吗 我的实施: public class MyValueAttribute : Attribute { public string MyValue { ge

我正在寻找一种优雅的方法来设置DateTime的值。现在作为属性的值

我有以下代码:

    [MyValue(DateTime.Now)]
    public DateTime? VertragDatum { get; set; }
但是我得到了一个语法错误,并告诉我DateTime类型不是有效的属性参数类型。你知道怎样才能做到吗

我的实施:

public class MyValueAttribute : Attribute
{
    public string MyValue { get; }

    public MyValueAttribute(DateTime myValue)
    {
        MyValue = myValue.ToString();
    }
}
说:

属性类的位置参数和命名参数的类型 仅限于以下属性参数类型:

以下类型之一:bool、byte、char、double、float、int、, 长,短,短,字符串,uint,ulong,ushort


DateTime不是受支持的类型

引用的有效类型包括:

属性类的位置参数和命名参数的类型 仅限于以下属性参数类型:

  • 以下类型之一:bool、byte、char、double、float、int、long、sbyte、short、string、uint、ulong、ushort
  • 类型对象
  • 类型System.type
  • 枚举类型,前提是它具有公共可访问性,并且嵌套它的类型(如果有)也具有公共可访问性(属性 规格)
  • 上述类型的一维数组
  • 没有这些类型之一的构造函数参数或公共字段不能用作中的位置参数或命名参数 属性规范

您希望何时设置该值?在对象创建时,在类型初始化时?这听起来像是xy问题。请注意,
DateTime.Now
将在编译时设置(例如
2019年8月6日17:21:05
),并在运行时读取(比如在
2019年10月14日14:52:47时)。你真的想要这样的行为吗?按照@dymanoid的说法,唯一可以用作属性构造函数参数的是常量表达式。C#没有常量或文字
DateTime
s(与VB不同)。如果它总是
DateTime.Now
,您可以在构造函数中设置它。但是,不仅将
DateTime。现在
不能在它所在的位置工作,没有DateTime表达式。您可以创建一个“fody”weaver,将当前日期时间作为字符串或某种基于roslyn的插件插入。我怀疑这超出了用户对此问题的期望范围。此答案的可能重复项是缺少有效的参数类型。我认为这是由于该问题通常被否决