我有一个关于在循环中定义的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)