Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这是一个捕获问题吗?我仍然可以';无法解决_C#_Capture - Fatal编程技术网

C# 这是一个捕获问题吗?我仍然可以';无法解决

C# 这是一个捕获问题吗?我仍然可以';无法解决,c#,capture,C#,Capture,我认为这是一个捕获问题,但我所做的一切都不起作用。请尝试在此处简化: foreach (Question question in Test.Questions) { int id= question.id; if(someIDictionary.TryGetValue(id, out value) { question.answerobject.number=someinteger; } else { question.answerobject.numb

我认为这是一个捕获问题,但我所做的一切都不起作用。请尝试在此处简化:

foreach (Question question in Test.Questions)
{
  int id= question.id;
  if(someIDictionary.TryGetValue(id, out value)
  { 
    question.answerobject.number=someinteger;
  }
  else
  {
    question.answerobject.number=someotherinteger;
  }
}
我试着为问题对象创建一个临时对象,但仍然不起作用。所有结果始终是最后一次迭代值

编辑:每个answerobject都是在每个问题对象中创建的,因为问题是使用linq to sql创建的。然后将问题作为IList返回。


编辑2:如果我给另一个问题字段赋值,则不会出现问题。问题只与answerobject有关。所有问题(上次作业)的answerobject值都相同。

您看到的问题是什么?“捕获”问题只影响异步/延迟/线程化代码-它不应该影响这种情况

我想知道这里最可能的问题是,您所有的
问题
对象都有相同的
answerobject
实例,或者您多次都有相同的
问题
实例


“捕获问题”的说明(参见注释):这是使用lambda/anon方法时出现的问题;如果在lambda/anon方法中使用迭代变量(
question
),则它是“捕获的”—但以稍微违反直觉的方式

比如,;我们可能期望它(以不可预测的顺序)打印数字0-9:

int[] vals = {0,1,2,3,4,5,6,7,8,9};
foreach(int i in vals) {
    ThreadPool.QueueUserItem(delegate {
        Console.WriteLine(i);
    });
}
Console.ReadLine();
但它不。。。我们通过添加一个额外变量来修复它:

int[] vals = {0,1,2,3,4,5,6,7,8,9};
foreach(int i in vals) {
    int tmp = i;
    ThreadPool.QueueUserItem(delegate {
        Console.WriteLine(tmp);
    });
}
Console.ReadLine();

这是因为捕获变量的行为由其词法范围决定。。。迭代变量的范围比我们希望的要大一些。

当创建对象时,将answerobject.number(int?)赋值为“Null”时,会出现问题。如果我在循环期间尝试分配一个值,我就会遇到上面的问题。如果我在创建对象时如何分配一个整数,问题就消失了,然后我可以在循环过程中添加新值。你能给我解释一下吗,因为我不明白。

能解释一下你想做什么吗?代码不是很明显。如果字典有问题ID,我会给answerobject赋值…你说你试图简化问题的代码。。。您没有使用简化版中没有显示的委托/lamda,是吗?@zsharp发布更多代码或更多信息,很难判断您提供的描述/信息的问题。您能修复格式吗?我一半的脑力都在试图弄清楚牙套应该如何排列。什么是“捕获”问题?marc在这篇文章中看到了我的答案。这更有意义吗?对不起,我仍然无法从可用的(很少的)信息中破译。