将任何内容转换为字符串,包括null

时间:2017-02-28 08:44:05

标签: c# asp.net

我有这个片段:

if (dt.Rows[0]["somefield"] != DBNull.Value) {
                    tbSomefield.Text = (string)dt.Rows[0]["somefield"];
                }

因为

tbSomefield.Text = (string)dt.Rows[0]["somefield"]
如果值为null,则

失败。

所以我喜欢一个能够安全地将空值转换为空白的函数。

tbSomefield.Text = nullstr(dt.Rows[0]["somefield"]);

9 个答案:

答案 0 :(得分:5)

使用Convert.ToString

tbSomefield.Text = Convert.ToString(dt.Rows[0]["somefield"])

Convert.ToString()方法正确处理nullDbNull值。

答案 1 :(得分:2)

然而,已经给出了对手头问题的正确答案,我可以看到在null对象上调用ToString()方法时存在混淆。

如果在引用类型上调用ToString(),运行时将抛出NullReferenceException

Movie m = null;
string stringMovie = m.ToString();

上面的代码会在m.ToString()

上抛出NullReferenceException

如果对象是可以为空的premitive类型,它将返回一个空字符串,如

int? nullInt = null;
string s = nullInt.ToString();

上面的代码将返回一个空字符串。

由于之前的答案表明Convert.ToString是安全的转换方式,如果对象为null,它将返回一个空字符串。

Movie m = null;
string movieString = Convert.ToString(m);

希望这可以解决这个困惑。

答案 2 :(得分:2)

WHERE NOT ([COMPANY_CODE] In (1001,1002,1003) And [YEAR_MONTH_ID] In (201701)) 个实例上调用方法 - 这是C#6.0 null conditional operator的目的之一:

null

但专门用于tbSomefield.Text = dt.Rows[0]["somefield"]?.ToString() ?? ""; 转换,最简洁的是简单地使用字符串连接运算符,它正确处理string并自动为您null

ToString

答案 3 :(得分:0)

使用Convert.ToString()安全地处理值

tbSomefield.Text = Convert.ToString(dt.Rows[0]["somefield"]);

另一种方法是使用conditional operator (?:) MSDN Reference

tbSomefield.Text = Convert.ToString((dt.Rows[0]["somefield"]) ? dt.Rows[0]["somefield"] : "Blank");

答案 4 :(得分:0)

您也可以创建一个扩展方法,以转换为下面的字符串

public static string SafeString(this object data)
{
   //here goes your logic to check `data` is null or there is a white space etc...
}

答案 5 :(得分:0)

这是 a" 将任何内容转换为string ",的方式帮助者我建议管理DataRow

此上下文中需要注意的重要事项是,当{时,C#null必须被视为特殊DBNull.Value {1}}从DB读取。

另一件事 - 在问题中没有真正提出 - 但我敢添加有用的恕我直言是一个通用的,可链接的扩展

DataRow

不仅适用于public static class ConvExt { public static DataRow ConvFromDB<T> (this DataRow DR, out T field, string col_name) { return ConvFromDB(DR, out field, col_name, default(T)); } public static DataRow ConvFromDB <T> (this DataRow DR, out T field, string col_name, T blank) { field = blank; if (DR[col_name] != DBNull.Value) { field = (T) DR[col_name]; } return DR; } } ,也适用于不同类型,例如

string

可能的用法是(使用可选第三个​​默认参数)

string TestText;
int TestInt;
DateTime? TestDate;

答案 6 :(得分:-1)

这就是诀窍:

        // Convert to a string or to blank if null
    public String nullstr(object indata) {
        if  (indata == DBNull.Value) {
            return "";
        } 
        else 
        {
            return indata.ToString();
        }
    }

答案 7 :(得分:-1)

使用as运算符:

tbSomefield.Text = dt.Rows[0]["somefield"] as string;

它不会使null空白。

答案 8 :(得分:-1)

你试过这个吗?

input { kafka { bootstrap_servers=>"localhost:9092" topics=>"test"}}
filter{
grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\t%{GREEDYDATA:topic}\t%{GREEDYDATA:json}" }
  }
  json {
     source => "json"
     remove_field => ["timestamp","topic","json","message","@version","@timestamp","tags"]
  }
 }
output{ elasticsearch {hosts=>["127.0.0.1:9200"] document_type=>"app_stats" index=>"test"}}