将可空数值转换为字符串。

6
我希望将可空数字转换为字符串,并保留 null 值。这是我的做法:

我正在进行以下操作:

int? i = null;
string s = i == null ? null : i.ToString();

有更简短的方式吗?

其实我觉得没有更短的了 - Gerald Versluis
除了使用扩展方法,我看不到任何更短的方式。 - NominSim
5个回答

8

您可以编写一些扩展方法:

public static string ToNullString(this int? i)
{
   return i.HasValue ? i.ToString() : null;
}

使用会更加简单:

string s = i.ToNullString();

或者通用版本:

public static string ToNullString<T>(this Nullable<T> value)
    where T : struct
{
    if (value == null)
        return null;

    return value.ToString();
}

对于添加一个类似的答案,我很抱歉,只是我想到了一个比你的更通用的版本.... - Jordão
没有必要保留我的答案了,因为你的答案实际上是一个更干净的扩展方法,+1。 - psubsee2003
@Clodoaldo,实际上他不是 :) - Sergey Berezovskiy
好的,我会点个赞,这样我被选中也不会感到太难过了...即使我被取消选择也没关系... - Jordão

5
你可以创建一个扩展方法来实现这个功能:
public static string ToStringOrNull<T>(this Nullable<T> nullable) 
where T : struct {
  return nullable.HasValue ? nullable.ToString() : null;
}

使用方法:

var s = i.ToStringOrNull();

更新

自C# 6开始,您可以使用更方便的null条件运算符

var s = i?.ToString();

糟糕..这次我很抱歉 - 只是想创建一个更通用的版本来回答问题:) 我没有复制您的答案! - Sergey Berezovskiy
我需要为decimal类型添加formatProvider参数,因此将通用版本删除以专门针对decimal扩展进行修改,详见我的回答https://dev59.com/_mbWa4cB1Zd3GeqPTBRI#47835010。不幸的是,无法在评论中编写方法,必须作为新答案编写,你有更好的想法吗? - QMaster

1

我认为

string s = i?.ToString();

更短。


是的!+1。但你必须欣赏在该运算符在该语言中可用之前,这个问题已经被提出并回答了。尽管如此,我也已经更新了我的答案。 - Jordão
是的,我知道这个问题早于该运算符的可用性。只是想抛出来,以防对任何人有帮助。 - Ceisc

0
我们还可以使用 System.Convert,例如:
int? i = null;
string s = Convert.ToString(i); // it gives null if i is null.

正如已经提到的,我们也可以使用空值条件运算符

string s = i?.ToString();

-1

我需要针对 decimal 类型的 formatProvider 参数,因此将通用版本更改为专门针对 decimal 扩展的版本,如下所示:

public static string ToStringOrNull(this Nullable<decimal> nullable, string format = null)        
{
    string resTmp = "";
    if (nullable.HasValue)
    {
        if (format != null)
        {
            resTmp = nullable.Value.ToString(format);
        }
        else
        {
            resTmp = nullable.ToString();
        }
    }
    else
    {
        resTmp = "";
    }
    return resTmp;
}

@Jordão 是的,我的数据库表中有一些可空的十进制字段,因此在实体框架模型中定义为可空的十进制。为了在 Web 应用程序视图中使用它们,必须将其转换为字符串,而作为可空类型,我无法使用标准的 ToString() 方法。 - QMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接