2016-03-31 9 views
-1

foreachスコープ内にPropertyInfoタイプの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); 
    } 

Visual Studioのコンパイラは二IF声明の中で、このpropが存在しないことを私に言っていますか?誰がこれがなぜなのか説明できますか?

+2

'foreach'に' {'と'}を追加します。そしてあなたは* scope *をあなた自身で見るべきです。 – Sinatr

+0

どのような愚かな間違い!ありがとう! – Haris

+0

@Sinatr回答として投稿してください。私は受け入れることができます – Haris

答えて

3

あなたは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); 
    } 
} 
+0

ありがとう、それは愚かな間違いだった:) – Haris

0

あなたはpropsに各propのために実行されるコードのブロックを示すために任意の中括弧を持っていません。したがって、すぐ次の声明だけです。

あなたの現在のコードが評価されているどのように中括弧を追加した場合、それは次のようになります。あなたはcomModel.FieldValueLetコールに着く頃には

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

propは非常にための範囲の外になっています長い時間。

+0

あなたの答えに感謝:) – Haris

+2

あなたの括弧は適切な場所にありません –