通过IEnumerable数据行迭代时如何避免空引用异常?

时间:2018-10-29 20:50:37

标签: c# .net

我有一张翻译地图,如下所示:

enter image description here

我有一个查询,可以查询上面每一行的翻译内容:

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"];

但是由于某种原因,当我遍历该数据行时,我得到了异常的行为:

enter image description here

例如,如果我将translateFrom设置为空字符串:

var translateFrom="";

然后我在此行上得到一个空引用异常:

var translateTo = (string)row.FirstOrDefault()?["TranslateTo"];

目标是将string.Empty翻译为U,如上面的翻译所示。

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您可以使用以下扩展方法:

public static class MyExtensions {
    public static string NullSafe(this string s){
        if(s == null){
            return "";
        }
        return s;
    }   
}

然后像这样使用它将空数据转换为空字符串:

dataRow.Field<string>("TranslateFrom").NullSafe().ToLower().Trim()