我有这个片段:
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"]);
答案 0 :(得分:5)
使用Convert.ToString
:
tbSomefield.Text = Convert.ToString(dt.Rows[0]["somefield"])
Convert.ToString()
方法正确处理null
和DbNull
值。
答案 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"}}