可能重复:
linq query and nulls
如果缺少xml文件中的某些元素,则抛出一个null异常 - 我不想得到这个异常 - 我想在缺少元素旁边添加空字符串列表数据
InstrumentDescription inputFile = InstrumentDescription.Load(openFileDialog1.FileName);
var queryManufacturer = from dataManufaturer in
inputFile.Identification.Manufacturers.Manufacturer
select new
{
dataManufaturer.name,
dataManufaturer.cageCode,
dataManufaturer.FaxNumber,
dataManufaturer.URL.OriginalString
};
foreach (var a in queryManufacturer)
{
data.Add(a.name);
if (a.cageCode == null) data.Add("");
else data.Add(a.cageCode);
if (a.FaxNumber == null) data.Add("");
else data.Add(a.FaxNumber);
if (a.OriginalString == null) data.Add("");
else data.Add(a.OriginalString);
}
我试过像这样的somenthing - 但它不起作用
select new
{
name = dataManufaturer.name ?? "",
cageCode = dataManufaturer.cageCode ?? "",
FaxNumber = dataManufaturer.FaxNumber ?? "",
OriginalString = dataManufaturer.URL!=null ? dataManufaturer.URL.OriginalString : ""
};
如果缺少某些元素,我希望有一个空字符串,而不是异常。
我解决了它!!!
在选择中我只使用select new { dataManufacturer }
而不是这些所有可能的元素,当我添加到列表时只测试例如dataManufacturer.name是否为null
答案 0 :(得分:1)
我将在这里发布这个“评论”作为CW,以帮助您找到解决问题根源的正确方向。
在这个代码块中,有太多可能导致空引用异常的原因。在另一个问题中查看您的回答,很明显您不知道如何找出问题所在。所以试试这个。这是您向我们展示的代码的重写形式,以便于找出null的位置。运行它以找出这种情况发生的位置,希望您能够自己修复它。如果没有,那么 请 与我们分享此测试的结果,以便我们更好地了解您的问题,并为您提供更好的答案,帮助您解决问题。
这假设您正在制作Windows窗体应用程序或WPF应用程序。
var dialog = openFileDialog1;
if (dialog == null)
{
MessageBox.Show("openFileDialog1 is null");
}
var filename = dialog.FileName;
if (filename == null)
{
MessageBox.Show("openFileDialog1.FileName is null");
}
InstrumentDescription input;
try
{
input = InstrumentDescription.Load(filename);
}
catch (NullReferenceException e)
{
MessageBox.Show("NullReferenceException in InstrumentDescription.Load():\n" + e.Message);
}
if (input == null)
{
MessageBox.Show("inputFile is null");
}
var id = input.Identification;
if (id == null)
{
MessageBox.Show("inputFile.Identification is null");
}
var mans = id.Manufacturers;
if (mans == null)
{
MessageBox.Show("inputFile.Identification.Manufacturers is null");
}
var man = mans.Manufacturer;
if (man == null)
{
MessageBox.Show("inputFile.Identification.Manufacturers.Manufacturer is null");
}
var i = 0L;
foreach (var dm in man)
{
if (dm == null)
{
MessageBox.Show("dataManufaturer at index "+i+" is null");
}
if (dm.name == null)
{
MessageBox.Show("dataManufaturer.name at index " + i + " is null");
}
if (dm.cageCode == null)
{
MessageBox.Show("dataManufaturer.cageCode at index " + i + " is null");
}
if (dm.FaxNumber == null)
{
MessageBox.Show("dataManufaturer.FaxNumber at index " + i + " is null");
}
var u = dm.URL;
if (u == null)
{
MessageBox.Show("dataManufaturer.URL at index " + i + " is null");
}
if (u.OriginalString == null)
{
MessageBox.Show("dataManufaturer.URL.OriginalString at index " + i + " is null");
}
i++;
}
答案 1 :(得分:0)
怎么样
var queryManufacturer = from dataManufaturer in input.Identification.Manufacturers.Manufacturer
where dataManufaturer != null
select {...}