次のようなコードで、R# から「「NotNull」属性でマークされたエンティティへの「可能性のある「null」割り当て」というフィンガーワグがいくつか得られます。
if ((webResponse.StatusCode == HttpStatusCode.OK) && (webResponse.ContentLength > 0))
{
var reader = new StreamReader(webResponse.GetResponseStream()); // <-- R# hates this line of code
この場合、どのように StreamReader を null にできますか? 可能であれば、その可能性を防御的にプログラムするにはどうすればよいですか?
アップデート
さて、このコードを変更すると:
String strResult;
WebRequest objRequest = WebRequest.Create(strURL);
WebResponse objResponse = objRequest.GetResponse();
using (var sr = new StreamReader(objResponse.GetResponseStream()))
{
strResult = sr.ReadToEnd();
sr.Close();
}
return strResult;
...これに:
String strResult = string.Empty;
WebRequest objRequest = WebRequest.Create(strURL);
WebResponse objResponse = objRequest.GetResponse();
using (var sr = new StreamReader(objResponse.GetResponseStream()))
{
if (sr != null)
{
strResult = sr.ReadToEnd();
sr.Close();
}
}
return strResult;
...同じ (「使用中」の) 回線で同じフィンガーワグを取得します。
そして、これを次のように変更すると:
String strResult = string.Empty;
WebRequest objRequest = WebRequest.Create(strURL);
WebResponse objResponse = objRequest.GetResponse();
if (objResponse != null)
{
using (var sr = new StreamReader(objResponse.GetResponseStream()))
{
strResult = sr.ReadToEnd();
sr.Close();
}
}
return strResult;
...「「NotNull」属性でマークされたエンティティへの可能な「null」割り当て」は、依然として同じ行を参照しています。では、どうすれば R# のフィンガーワグを無効にできますか? 「使用」がnullの必要なチェックをラップするというISTM ...
更新 2
Resharper は次の行に文句を言います。
var reader = new StreamReader(webResponse.GetResponseStream());
..." 「NotNull」属性でマークされたエンティティへの「null」割り当ての可能性"
そこで、webResponse とリーダーの両方をチェックするように変更しました。
var webResponse = (HttpWebResponse)webRequest.GetResponse();
if ((webResponse != null) && (webResponse.StatusCode == HttpStatusCode.OK) && (webResponse.ContentLength > 0))
{
var reader = new StreamReader(webResponse.GetResponseStream());
if (reader != null)
{
...しかし、その後、「!=」テストの両方で「 Expression is always true 」と表示されます。「気をつけて! webResponse が null になる可能性があります!」と言っているようです。および/または、「注意してください!リーダーが null になる可能性があります!」しかし、「それは無駄なコードです。null になることはありません。」