-2

IdSubCategoryセッション変数Session["SubCategory"]がnullの場合、変数にnullを代入しようとしています

以下が機能しないのはなぜですか?

decimal tmpvalue2;
decimal? IdSubCategory = null;    
if (decimal.TryParse((string)Session["SubCategory"], out tmpvalue2))
    IdSubCategory = tmpvalue2;
4

3 に答える 3

2

私は通常、セッション変数をプロパティでラップします。

    protected decimal? IdSubCategory
    {
        get
        {
            if (Session["SubCategory"] == null)
                return null;
            else
                return decimal.Parse(Session["SubCategory"].ToString());
        }
        set
        {
            Session["SubCategory"] = value;
        }
    }
于 2012-07-11T17:35:02.433 に答える
0

何が機能していませんか? に何を保存してい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;
于 2012-07-11T18:24:56.150 に答える
0

メソッド decimal.TryParse には変換する文字列が必要ですが、Session["SubCategory"]が null の場合、コード行は null を string にキャストしようとしていますが、これはエラーになります

これです :if (decimal.TryParse((string)Session["SubCategory"], out tmpvalue2))

それを修正するにSession["SubCategory"]は、null でないかどうかを最初に確認してから、decimal.TryParse を実行してみてください。

于 2012-07-11T18:06:32.513 に答える