2016-03-31 4 views
-1

Я ищу, чтобы понять и исправить, почему prop типа PropertyInfo не существует в пределах foreach.Предстоящая переменная scope

Код:

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

Visual Studio компилятор говорит мне, что во втором IF заявлении это prop не существует? Может ли кто-нибудь объяснить, почему это так?

+2

Добавьте '{' и '}' в 'foreach'. Затем вы должны увидеть * область * самостоятельно. – Sinatr

+0

какая глупая ошибка! ха спасибо! – Haris

+0

@Sinatr, пожалуйста, напишите как ответ, чтобы я мог принять – Haris

ответ

3

Вам нужна скобка для блока Еогеаспа:

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

спасибо, это была глупая ошибка :) – Haris

0

У вас нет никаких фигурных скобок для обозначения блока кода, который будет выполняться для каждого prop в props. Таким образом, только следующее следующее утверждение.

Если добавить фигурные скобки, как ваш текущий код оценивается, она будет выглядеть следующим образом:

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 был из области видимости очень много времени.

+0

спасибо за ваш ответ :) – Haris

+2

Ваши скобки не в нужных местах –

Смежные вопросы