2017-02-02 30 views
0

我得到以下Klocwork的問題,而這樣做代碼分析,參考「GetUnderlyingType」從調用函數「GetUnderlyingType」回報可能爲空

參考「GetUnderlyingType」從調用返回功能「GetUnderlyingType」可以爲null

if (Nullable.GetUnderlyingType(objProperty.PropertyType) != null) 
       { 
        value = row[columnname].ToString().Replace("$", "").Replace(",", ""); 
        objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(Nullable.GetUnderlyingType(objProperty.PropertyType).ToString())), null); 
       } 
       else 
       { 
        value = row[columnname].ToString().Replace("%", ""); 
        objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(objProperty.PropertyType.ToString())), null); 
       } 

enter image description here

回答

1

From the documentation

返回值
類型:System.Type

的nullableType參數的類型參數,如果nullableType 參數是一個封閉的通用空類型; 否則,空

你與外if條款處理這個問題,但VisualStudio中似乎並沒有認識到它。解決辦法是這樣的:

var ut = Nullable.GetUnderlyingType(objProperty.PropertyType); 
if (ut != null) 
{ 
    value = row[columnname].ToString().Replace("$", "").Replace(",", ""); 
    objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(ut.ToString())), null); 
} 
else 
{ 
    value = row[columnname].ToString().Replace("%", ""); 
    objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(objProperty.PropertyType.ToString())), null); 
} 
+0

這裏需要什麼代碼修改,你能不能請發帖代碼 – user584018

+0

我錯過了外層if子句。空值被處理,但這不被VS識別。 – Dawnkeeper