C# 在迭代IEnumerable datarow时如何避免空引用异常?
我有一个翻译图,看起来像这样:C# 在迭代IEnumerable datarow时如何避免空引用异常?,c#,.net,C#,.net,我有一个翻译图,看起来像这样: public static class MyExtensions { public static string NullSafe(this string s){ if(s == null){ return ""; } return s; } } 我有一个查询,可以从上面的每一行获取翻译: var fieldType="Gender"; var translateFro
public static class MyExtensions {
public static string NullSafe(this string s){
if(s == null){
return "";
}
return s;
}
}
我有一个查询,可以从上面的每一行获取翻译:
var fieldType="Gender";
var translateFrom = "F";
IEnumerable<DataRow> row = from dataRow in translations.AsEnumerable()
where dataRow.Field<string>("TranslateFrom").ToLower().Trim() == translateFrom
&& dataRow.Field<string>("FieldType").ToLower().Trim() == fieldType
select dataRow;
var translateTo = (string)row.FirstOrDefault()?["TranslateTo"];
然后我在这一行得到一个空引用异常:
var translateTo = (string)row.FirstOrDefault()?["TranslateTo"];
目标是将string.Empty
转换为U
,如上所示
我做错了什么?您可以这样做一个小小的扩展方法:
public static class MyExtensions {
public static string NullSafe(this string s){
if(s == null){
return "";
}
return s;
}
}
然后像这样使用它将空数据转换为空字符串:
var translateFrom="";
dataRow.Field<string>("TranslateFrom").NullSafe().ToLower().Trim()
dataRow.Field(“TranslateFrom”).NullSafe().ToLower().Trim()
TranslateFrom值是否为null(即DBNull.value
)?如果是这样,我希望在dataRow.Field(“TranslateFrom”).ToLower()
处出现空引用异常。不如试试dataRow[“TranslateFrom”].ToString().ToLower()
?我希望它能像DBNull一样工作。Value.ToString()是一个空字符串。行
应该被命名为行
,因为它代表一个集合。@joe这是一个很棒的主意,但是发生的是集合IEnumerable行
是empty@AlexGordon-第一个默认值,检查是否为空-你是个天才!谢谢你,我的朋友