2

对象 i 来自数据库。PrDT 为字符串,PrDateTime 为 DataTimeOffset 类型,可为空

vi.PrDT = i.PrDateTime.Value.ToString("s");

什么是快速方法?我不想要 if else 等...

4

5 回答 5

9

使用条件运算符

vi.PrDT = i.PrDateTime.HasValue ? i.PrDateTime.Value.ToString("s") :
                                  string.Empty;
于 2012-12-13T19:55:10.037 回答
5

你可以做一个扩展方法:

public static class NullableToStringExtensions
{
    public static string ToString<T>(this T? value, string format, string coalesce = null)
        where T : struct, IFormattable
    {
        if (value == null)
        {
            return coalesce;
        }
        else
        {
            return value.Value.ToString(format, null);
        }
    }
}

进而:

vi.PrDT = i.PrDateTime.ToString("s", string.Empty);
于 2012-12-13T20:02:43.417 回答
2
string.Format("{0:s}", i.PrDateTime) 

如果它为空,上面将返回一个空字符串。由于Nullable<T>.ToString检查空值并返回空字符串,否则返回字符串表示形式(但不能使用格式说明符)。诀窍是使用 string.Format,它允许您使用所需的格式说明符(在本例中为s)并仍然获得Nullable<T>.ToString行为。

于 2012-12-13T20:43:35.230 回答
2
return (i.PrDateTime.Value ?? string.Empty).ToString();

刚刚测试,它似乎工作。

于 2012-12-14T11:08:06.713 回答
-1
return i.PrDateTime.Value.ToString("s") ?? string.Empty;
于 2012-12-13T19:59:39.040 回答