我在空检查中遇到了问题。
if (element == null)
抛出
对象引用未设置为对象的实例。
为什么在此点进行简单的空检查失败?当我在这个位置创建断点时,元素的值为“null”,但无论如何都会抛出异常。
PS:此时,没有其他线程处于活动状态。
internal static ConcurrentBag<Node_Library> AddFileDetail(
this ConcurrentBag<Node_Library> list,
FileDetails file , Node<Node_Application> app)
{
var element = list.FirstOrDefault(x => file.Equals(x));
if (element == null)
{
list.Add(new Node_Library(file, app));
}
else
{
if (!element.ApplicationNodes.Contains(app))
{
element.AddNode(app);
}
}
return list;
}
编辑:文件不为空,列表为空但不为空
EDIT2:运营商和FileDetail详细信息
public class FileDetails
{
internal string FileName { get; private set; }
internal string Name { get; private set;}
internal string Endung { get; private set; }
internal string Version { get; private set; }
internal string Produkt { get; private set; }
internal string ProduktVersion { get; private set; }
internal FileTyp Filetyp { get; private set; }
internal string Pfad { get; private set; }
public static bool operator==(FileDetails file1, Node_Library library)
{
return
file1.Version == library.Version &&
file1.Produkt == library.Produkt &&
file1.ProduktVersion == library.ProduktVersion &&
file1.FileName == library.FileName;
}
public static bool operator !=(FileDetails file1, Node_Library library)
{
return
!(file1.Version == library.Version &&
file1.Produkt == library.Produkt &&
file1.ProduktVersion == library.ProduktVersion &&
file1.FileName == library.FileName);
}
public static bool operator ==(FileDetails file1, FileDetails file2)
{
if (
file1.FileName == file2.FileName &&
file1.Produkt == file2.Produkt &&
file1.ProduktVersion == file2.ProduktVersion &&
file1.Version == file2.Version)
return true;
return false;
}
public static bool operator !=(FileDetails file1, FileDetails file2)
{
if (
file1.Name == file2.Name &&
file1.Produkt == file2.Produkt &&
file1.ProduktVersion == file2.ProduktVersion &&
file1.Version == file2.Version)
return false;
return true;
}
internal bool Equals(Node_Library file2)
{
if (file2 == null)
{
return false;
}
return (
Name == file2.Name &&
Produkt == file2.Produkt &&
ProduktVersion == file2.ProduktVersion &&
Version == file2.Version);
}
//More Stuff
}
EDIT3: 我在相同的超载中使用了断点,但它从未触发......所以问题可能是FirstOrDefault?
最后: 操作员过载错误。固定它。很多。
答案 0 :(得分:1)
问题可能是前一行:
var element = list.FirstOrDefault(x => file.Equals(x));
file
参数可能是null
。
编辑:如果file
不为空,则FileDetails.Equals
方法可能是罪魁祸首。
答案 1 :(得分:1)
问题在于您的运营商:
public static bool operator==(FileDetails file1, Node_Library library)
{
return
file1.Version == library.Version &&
file1.Produkt == library.Produkt &&
file1.ProduktVersion == library.ProduktVersion &&
file1.FileName == library.FileName;
}
当您将实例与null
进行比较时,它会尝试访问来自{Version
,Produkt
,ProduktVersion
和FileName
的属性{1}}实例,因此null
。
所以,回答你的初始问题NullReferenceException
,因为一旦你覆盖了运算符,就没有关于那个空检查的简单问题。 = d
要解决此问题,您可以在"Why can a simple null check fail at this Point?"
上添加空检查:
file2