我有问题!我发现有很多人有同样的问题,但没有一个答案让我感到高兴。我试图从List<>获取特定项目但我的“测试”结果返回null,为什么?
public MainWindow()
{
InitializeComponent();
var modelList = new Model2();
modelList.MyPropertyList.Add(new Model1 { Name = "Hej1", MyProperty1 = true });
modelList.MyPropertyList.Add(new Model1 { Name = "Hej2", MyProperty1 = false });
var test = modelList.MyPropertyList.Find(x => x.Name == "Hej1").MyProperty1;
}
答案 0 :(得分:3)
根据OP评论
你怎么知道它是空的? - dotctor 1小时前
当我调试时,该值为null .. - Dennis Eriksson 1小时前
你确定在执行该行后检查了该值吗?尝试添加 `MessageBox.Show(test.ToString());)并查看结果是什么 - dotctor 1小时前
我对自己的问题感到羞耻..这是一直有效的工作!它是 我的错,我在宣布之前读了这个值"测试"!但 谢谢!! - Dennis Eriksson 1小时前
我认为问题在于您调试程序的方式。您已在第var test = modelList.MyPropertyList.Find(x => x.Name == "Hej1").MyProperty1;
行放置了一个断点,执行在此行之前停止,但您认为此行已执行并且 Visual Studio显示{{1}的值在Autos窗口中作为test
,这使您认为null
确实为空。如果您通过按test
继续执行或添加F10
之类的行,只是为了执行上一行或以某种方式显示MessageBox.Show(test.ToString());
的值,您会发现它不是test
。
答案 1 :(得分:2)
答案不多 - 但是你的代码 - 应该可以正常工作。
void Main()
{
var modelList = new Model2();
modelList.MyPropertyList.Add(new Model1 { Name = "Hej1", MyProperty1 = true });
modelList.MyPropertyList.Add(new Model1 { Name = "Hej2", MyProperty1 = false });
var test = modelList.MyPropertyList.Find(x => x.Name == "Hej1").MyProperty1;
Console.WriteLine (test);
}
public class Model1
{
public string Name { get; set; }
public bool? MyProperty1 { get; set; }
}
public class Model2
{
public List<Model1> MyPropertyList { get; set; }
public Model2()
{MyPropertyList = new List<Model1>();
}
}
结果:True
。
答案 2 :(得分:-1)
而不是Find()尝试使用以下内容:
var test = modelList.MyPropertyList.SingleOrDefault(model => model.Name == "Hej1");
if(test != null)
{
//-- do something here
}