2016-03-31 115 views
-1

我在尋找理解並解決範圍內不存在類型PropertyInfoprop的原因。每個變量的範圍

代碼:

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塊:

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中運行。因此,只有緊接着的下一個陳述是。

如果添加大括號到您當前密碼是如何被評估的,它應該是這樣的:

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

您的括號不在正確的位置 –