如何返回DateTime.今天作为FileHelpers中的FieldNullValue

本文关键字:FileHelpers 中的 FieldNullValue 今天 DateTime 何返回 返回 | 更新日期: 2023-09-27 17:49:18

我试图将FileHelpers类中的DateTime变量的FieldNullValue设置为Today值(因此,如果当我读取.csv时没有条目,则默认为今天的日期)。我试过的代码是:

[FieldOptional]
[FieldNullValue(DateTime.Today)]
public DateTime DATE;

但是我得到了错误

"错误1属性参数必须是一个常量表达式typeof属性参数的表达式或数组创建表达式类型"。

有人能解释一下我做错了什么吗?

如何返回DateTime.今天作为FileHelpers中的FieldNullValue

明显的方法是

[FieldOptional]
[FieldNullValue(typeof(DateTime), DateTime.Today.ToString("M-dd-yyyy"))] 
public DateTime DATE; 

但是,似乎FieldNullValueAttribute是无法评估表达式的情况下DateTime.Today.ToString(),所以唯一的方法去你是硬编码一个固定的日期作为字符串(不是我们想在我们的代码):

[FieldOptional]
[FieldNullValue(typeof(DateTime), "5/15/2015")] 
public DateTime DATE;

DateTime。今天不是一个常量值,对于日期时间值,你必须使用typeof运算符,就像下面这样,这里你必须指定一个固定的日期,即一个常量值

[FieldNullValue(typeof(DateTime), "2005-1-1")]

或者第二种方法是将DATE声明为可空类型

public DateTime? DATE;
然后为 转换创建一个属性
public DateTime? DATE     {
   get 
    {
    if (DATE.HasValue)
        return DATE;
    else
        return DateTime.Today;
    }
}

ConnectingKamlesh的答案是正确的,尽管他的例子混淆了事情,因为他将属性命名为与字段相同。

是的,你的问题与变量有关,但你所做的是将变量作为属性的私有/支持字段。由于FileHelpers默认情况下只使用字段而不使用属性,因此您可以加载到私有字段,但访问为您进行转换的属性。

在下面的例子中,我们有一个系统,它只使用整数值,没有小数,因为它在字符串形式中以alpha表示第一个(或最后一个)数字。

因此,为了获得正确的格式,可以正确使用的小数位数,我使用以下代码:

    [FieldOrder(59),FieldAlign(AlignMode.Right, '0'),
     FieldConverter(typeof(SynergyHelper.DecimalConverter)),
     FieldFixedLength(5)]
    private Nullable<System.Int32 > m_CLOYAL;
    public Nullable<System.Decimal > CLOYAL
    {
        get
        {
            if (m_CLOYAL.HasValue)
                return (System.Decimal)((System.Double)m_CLOYAL / Math.Pow(10, 2));
            return null;
        }
        set
        {
            m_CLOYAL = (System.Int32)(((System.Double)value.GetValueOrDefault()) * 
                                                      Math.Pow(10, 2));
        }
    }

所以你可以看到后面的字段,你不能触摸,但属性是可用的。对我来说,我也经历了DecimalConverter的额外步骤(这是我自己的转换代码),但正如你所知道的,属性必须使用它们所针对的属性/字段/类之外的静态值。