可能重复:
linq查询并清空
如果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);
}
我试过这样的方法,但不起作用
select new
{
name = dataManufaturer.name ?? "",
cageCode = dataManufaturer.cageCode ?? "",
FaxNumber = dataManufaturer.FaxNumber ?? "",
OriginalString = dataManufaturer.URL!=null ? dataManufaturer.URL.OriginalString : ""
};
如果某些元素丢失,我希望有一个空字符串,而不是为了得到异常。
我解决了!!!
在select中,我只使用select new { dataManufacturer }
,而不是所有可能的元素,当我添加到列表中时,只测试dataManufacturer.name是否为null
我将把这个"评论"作为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++;
}
怎么样
var queryManufacturer = from dataManufaturer in input.Identification.Manufacturers.Manufacturer
where dataManufaturer != null
select {...}