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);
}
}