2012-07-06 107 views
0

我取回財產的價值爲NULL通過調用的GetValue像這樣:PropertyInfo.GetValue返回的對象是沒有看到由Visual Studio/ReSharper的

//have T tObj; 
var sExpr = s.Body as MemberExpression; 
var sProp = typeof(T).GetProperty(sExpr.Member.Name); 
var sVal = dProp.GetValue(tObj, null); 

出於某種原因SVAL永遠不會認爲是null由編譯器/ resharper(我不知道哪一個顯示警告)。在設計時我沒有得到可能的空引用警告。如果我創建一個條件,如if(sVal == null),我會得到一個設計時間警告,表達式總是爲false。

sVal只是一個對象,對象可以爲null。我不認爲GetValue保證永不返回null。這是怎麼回事?

+0

什麼樣的警告看起來像? – Tigran 2012-07-06 21:58:25

+2

請顯示一個簡短的*完整的*程序,它會給出警告。我強烈懷疑這不是你認爲的代碼。 – 2012-07-06 22:01:20

+0

可能是因爲第一個'var sExpr = s.Body as MemberExpression;'是R#識別爲可能爲空的那個。 – rossipedia 2012-07-06 22:01:26

回答

1

John Skeet是對的。在處理變量後我正在檢查null。我重新安排了我的代碼,在處理變量之前進行空檢查,問題就消失了。奇怪的是,我沒有得到一個空引用警告,我應該有。

相關問題