从列表<>获取特定项

本文关键字:获取 列表 | 更新日期: 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
}