linq查询并再次为null



可能重复:
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 {...}

相关内容

  • 没有找到相关文章

最新更新