循环遍历列表并使用linq - REPLACING FOREACH添加到另一个列表

时间:2015-01-13 17:00:39

标签: c# linq

我有两个MyObjectA和MyObjectB

public class MyObjectA    
{
    private int A_ID {get; set;}
    private int B_ID {get; set;}
    .
    .
    .
    .        
}

public class MyObjectB    
{
    private int B_ID {get; set;}
    .
    .
    .
    .

    public MyObjectB (int B_ID )
    {            
        DAL.GetMyObjectBFromDatabase(B_ID );
    }
}

现在我在我的功能中尝试做的是

public void DoSomething()
{

    List<MyObjectA> ListA = new List<MyObjectA>();
    List<MyObjectB> ListB = new List<MyObjectB>();

    ListA  = DAL.GetMyObjectAListFromDatabase();  

我在 x.B_ID 中的null异常下面的行中收到错误。如果我通过它调试。 ListA有计数&gt; 0和每个 x.B_ID都有值。但下面的代码执行的那一刻ListA变为null,不知道为什么。

我重复在ListA中没有空。当执行FOREACH时,ListA成为NULL。我这是为了取代C#FOREACH。我的名单对于工作是正确的。我的问题是为什么会发生这种情况

    ListA.ForEach(x => {
            ListB.Add(new MyObjectB(x.B_ID));
    });
}

我要做的就是循环浏览ListA以获取B_ID并使用B_ID获取ListB。正如在这个linq中所做的那样。 Linq style "For Each"

请帮助我了解我出错的地方

1 个答案:

答案 0 :(得分:0)

NullReferenceExceptionx null引起,这意味着ListA的成员是null,而不是ListA本身就是null ListA = DAL.GetMyObjectAListFromDatabase();

例如,如果您调用了以下3行而不是ListA.Add(new MyObjectA()); ListA.Add(null); ListA.Add(new MyObjectA());

Select

编辑:

再看看你正在做什么,你所做的正确工具是ListB = ListA.Select(x => new MyObject(x.B_ID)).ToList();

{{1}}