从列表<>获取特定项
本文关键字:获取 列表 | 更新日期: 2023-09-27 17:56:13
我有问题!我发现有很多人有同样的问题,但没有一个答案对我有帮助。我试图从列表中获取特定项目<>但我的"测试"结果返回 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;
}
根据OP评论
你怎么知道它是空的? – dotctor 1小时前
当我调试时,值为空。– 丹尼斯·埃里克森 1 小时前
您确定在执行该行后检查该值吗? 尝试添加 'MessageBox.Show(test.ToString());)看看结果是什么—— 多克托 1小时前
我对我的问题感到羞耻..它一直在工作!它是 我的错是我在声明"测试"之前读取了该值!但 谢谢!!– 丹尼斯·埃里克森 1 小时前
我认为问题在于您调试程序的方式。您已在第 var test = modelList.MyPropertyList.Find(x => x.Name == "Hej1").MyProperty1;
行上放置了一个断点,并且执行在此行之前停止,但您认为此行已经执行,并且 Visual Studio 在"自动"窗口中显示test
的值null
,这使您认为test
确实为空。如果您通过按 F10
继续执行或添加类似 MessageBox.Show(test.ToString());
的行只是为了使前一行执行或以某种方式显示test
的值,您会发现它不是null
。
不是一个答案 - 但你的代码 - 应该可以正常工作。
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
.
而不是 Find() 尝试使用以下方法:
var test = modelList.MyPropertyList.SingleOrDefault(model => model.Name == "Hej1");
if(test != null)
{
//-- do something here
}