小编Rik*_*iko的帖子

循环中定义的Linq表达式的范围 - 问题:关闭循环变量

我有一个关于在循环中定义的Linq表达式的范围问题.以下LinqPad C#程序演示了这种行为:

void Main()
{
    string[] data=new string[] {"A1", "B1", "A2", "B2" };
    string[] keys=new string[] {"A", "B" };

    List<Result> results=new List<Result>();

    foreach (string key in keys) {
        IEnumerable<string> myData=data.Where (x => x.StartsWith(key));     
        results.Add(new Result() { Key=key, Data=myData});          
    }   
    results.Dump();
}

// Define other methods and classes here
class Result {
    public string Key { get; set; }
    public IEnumerable<string> Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

基本上,"A"应该有数据[A1,A2]和"B"应该有数据[B1,B2].

但是,当您运行此"A"获取数据[B1,B2]时,BIe也会为所有Result实例计算最后一个表达式.

鉴于我在循环中声明了"myData",为什么它表现得好像我在循环之外声明它?如果我这样做的话,它表现得像我期望的那样:

void Main()
{
    string[] data=new string[] {"A1", "B1", "A2", "B2" }; …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects

2
推荐指数
1
解决办法
251
查看次数

标签 统计

c# ×1

linq ×1

linq-to-objects ×1