从列表中获取特定项目<>

时间:2015-06-14 14:33:45

标签: c# .net

我有问题!我发现有很多人有同样的问题,但没有一个答案让我感到高兴。我试图从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;
}

3 个答案:

答案 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
}