IdSubCategory
セッション変数Session["SubCategory"]
がnullの場合、変数にnullを代入しようとしています
以下が機能しないのはなぜですか?
decimal tmpvalue2;
decimal? IdSubCategory = null;
if (decimal.TryParse((string)Session["SubCategory"], out tmpvalue2))
IdSubCategory = tmpvalue2;
IdSubCategory
セッション変数Session["SubCategory"]
がnullの場合、変数にnullを代入しようとしています
以下が機能しないのはなぜですか?
decimal tmpvalue2;
decimal? IdSubCategory = null;
if (decimal.TryParse((string)Session["SubCategory"], out tmpvalue2))
IdSubCategory = tmpvalue2;
私は通常、セッション変数をプロパティでラップします。
protected decimal? IdSubCategory
{
get
{
if (Session["SubCategory"] == null)
return null;
else
return decimal.Parse(Session["SubCategory"].ToString());
}
set
{
Session["SubCategory"] = value;
}
}
何が機能していませんか? に何を保存していSession["SubCategory"]
ますか?
これらのテストは、ID を表す文字列をセッション オブジェクトに格納するときに合格します。
[Test] public void GivenWhenIntegerString_WhenTryParse_ThenValidInteger()
{
Dictionary<string, Object> fakeSession = new Dictionary<string, object>();
fakeSession["SubCategory"] = "5";
decimal tmp;
decimal? IdSubCategory = null;
if (decimal.TryParse((string)fakeSession["SubCategory"], out tmp))
IdSubCategory = tmp;
Assert.That(IdSubCategory, Is.EqualTo(5d));
}
[Test] public void GivenWhenNull_WhenTryParse_ThenNull()
{
Dictionary<string, Object> fakeSession = new Dictionary<string, object>();
fakeSession["SubCategory"] = null;
decimal tmp;
decimal? IdSubCategory = null;
if (decimal.TryParse((string)fakeSession["SubCategory"], out tmp))
IdSubCategory = tmp;
Assert.That(IdSubCategory, Is.EqualTo(null));
}
int
またはdecimal
を格納すると、このテストは失敗します。Session["SubCategory"]
[Test]
public void GivenWhenInteger_WhenTryParse_ThenValidInteger()
{
Dictionary<string, Object> fakeSession = new Dictionary<string, object>();
fakeSession["SubCategory"] = 5;
decimal tmp;
decimal? IdSubCategory = null;
if (decimal.TryParse((string)fakeSession["SubCategory"], out tmp))
IdSubCategory = tmp;
Assert.That(IdSubCategory, Is.EqualTo(5d));
}
この場合、これで修正されます。
decimal tmp;
decimal? IdSubCategory = null;
if (Session["SubCategory"] != null &&
decimal.TryParse(Session["SubCategory"].ToString(), out tmp))
IdSubCategory = tmp;
メソッド decimal.TryParse には変換する文字列が必要ですが、Session["SubCategory"]
が null の場合、コード行は null を string にキャストしようとしていますが、これはエラーになります
これです :if (decimal.TryParse((string)Session["SubCategory"], out tmpvalue2))
それを修正するにSession["SubCategory"]
は、null でないかどうかを最初に確認してから、decimal.TryParse を実行してみてください。