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-第一个默认值,检查是否为空-你是个天才!谢谢你,我的朋友