簡體   English   中英

從List <>獲取特定項目

[英]Getting an specific item from List<>

我有個問題! 我發現有人遇到同樣的問題,但沒有答案對我有幫助。我試圖從List <>獲取特定項目,但我的“ test”結果返回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小時前
當我調試時,該值為null。-– Dennis Eriksson 1小時前


確定執行該行后檢查值嗎? 嘗試添加`MessageBox.Show(test.ToString());)看看結果是什么– dotctor 1小時前


我為我的問題感到羞恥。.它一直在起作用! 我在將值聲明為“測試”之前讀取該值是我的錯! 但是謝謝! – Dennis Eriksson 1小時前


我認為問題出在調試程序的方式上。 您已經在var test = modelList.MyPropertyList.Find(x => x.Name == "Hej1").MyProperty1;上放置了一個斷點var test = modelList.MyPropertyList.Find(x => x.Name == "Hej1").MyProperty1; 並且執行立即在該行之前停止, 但是您認為該行已經執行,並且Visual Studio在Autos窗口中將test的值顯示為null ,這使您認為該test實際上為null。 如果按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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM