C# Foreach变量范围

C# Foreach变量范围,c#,foreach,C#,Foreach,我希望了解并修复为什么PropertyInfo类型的prop不存在于foreach范围内 代码: Visual studio编译器告诉我,在第二个IF语句中,这个prop不存在?有人能解释为什么会这样吗?foreach块需要括号: foreach (var prop in props) // For each of type's properties { if (prop.GetCustomAttributes(typeof(Mappable)).Any()) mapSwit

我希望了解并修复为什么
PropertyInfo
类型的
prop
不存在于
foreach
范围内

代码:


Visual studio编译器告诉我,在第二个
IF
语句中,这个
prop
不存在?有人能解释为什么会这样吗?

foreach块需要括号:

foreach (var prop in props) // For each of type's properties
{
   if (prop.GetCustomAttributes(typeof(Mappable)).Any())
       mapSwitch = 1;

   if (isLevelMatch(isContinueToGetData, mapSwitch, props))
   {
      if (model.GetType().GetProperty(prop.Name).GetValue(obj) != null)
        comModel.FieldValueLet(prop.Name, model.GetType().GetProperty(prop.Name).GetValue(obj));
      else
        comModel.FieldValueLet(prop.Name, DBNull.Value);
   }
}

您没有任何花括号来表示要为
props
中的每个
prop
运行的代码块。因此,只有紧接着的下一个语句是

如果将花括号添加到当前代码的求值方式中,它将如下所示:

foreach (var prop in props) // For each of type's properties
{
    if (prop.GetCustomAttributes(typeof(Mappable)).Any())
    {
        mapSwitch = 1;
    }
}

if (isLevelMatch(isContinueToGetData, mapSwitch, props))
{
    if (model.GetType().GetProperty(prop.Name).GetValue(obj) != null)
    {
        comModel.FieldValueLet(prop.Name, model.GetType().GetProperty(prop.Name).GetValue(obj));
    }
    else
    {
        comModel.FieldValueLet(prop.Name, DBNull.Value);
    }
}

当你到达你的
comModel.FieldValueLet
调用时,
prop
已经超出范围很长时间了。

{
}
添加到
foreach
。那你应该自己去看范围。真是个愚蠢的错误!哈,谢谢@Sinatr请将其作为答案发布,以便我能够接受。我认为已经有足够的答案了还有足够的反对票!!!谢谢,这是一个愚蠢的错误:)谢谢你的回答:)你的括号不在正确的位置
foreach (var prop in props) // For each of type's properties
{
    if (prop.GetCustomAttributes(typeof(Mappable)).Any())
    {
        mapSwitch = 1;
    }
}

if (isLevelMatch(isContinueToGetData, mapSwitch, props))
{
    if (model.GetType().GetProperty(prop.Name).GetValue(obj) != null)
    {
        comModel.FieldValueLet(prop.Name, model.GetType().GetProperty(prop.Name).GetValue(obj));
    }
    else
    {
        comModel.FieldValueLet(prop.Name, DBNull.Value);
    }
}