2011-07-18 9 views
0

ここにコードの切り抜きスニペットがあります。 tupleUnits.KeyとtupleRはどちらもnull以外のオブジェクトです。NullReferenceException C#で辞書を追加する

public partial class AllLicenseeUnits : System.Web.UI.Page { 
    protected Dictionary<int, TupleRecordsRange> unitsInTuple = new Dictionary<int, TupleRecordsRange>(); 

    public Paginator getPaginator(int itemsPerPage) { 
    if (unitsInTuple == null) { 
     Dictionary<int, int> tuplesUnits = DataAccess.CountLicenseeUnitsTuple(Session["licensee"] as Licensee); 
     tuplesUnits = tuplesUnits.Where(item => item.Value > 0).ToDictionary(item => item.Key, item => item.Value); 
     int index = 0; 
     foreach(KeyValuePair<int, int> tupleUnits in tuplesUnits) { 
      TupleRecordsRange tupleR = new TupleRecordsRange{start_index = index, end_index= (index + tupleUnits.Value -1)}; 
      unitsInTuple.Add(tupleUnits.Key, tupleR); 
      index += tupleUnits.Value; 
     } 
    } 
    int sumUnits = unitsInTuple.Sum(item => item.Value.totalRecords); 
    Paginator paginator = new Paginator(itemsPerPage, sumUnits); 
    if (Request.QueryString["page"] != null) 
    { 
     paginator.currentPage = int.Parse(Request.QueryString["page"]); 
    } 
    return paginator; 
    } 
} 

なぜこれが起こっている私は.Add(に渡すperameters)の両方がnullではないので、私は理解していません。

-  tupleUnits {[1, 3081]} System.Collections.Generic.KeyValuePair<int,int> 

+  tupleR {AllLicenseeUnits.TupleRecordsRange} AllLicenseeUnits.TupleRecordsRange 

スタックトレース:あなたはそれに追加する前に辞書を作成していない、あなたの例では

at AllLicenseeUnits.getPaginator(Int32 itemsPerPage) in C:\Users\User\Documents\Bla_Devel\AllLicenseeUnits.aspx.cs:line 46 
    at AllLicenseeUnits.Page_Load(Object sender, EventArgs e) in C:\Users\User\Documents\Bla_Devel\AllLicenseeUnits.aspx.cs:line 32 
    at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) 
    at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) 
    at System.Web.UI.Control.OnLoad(EventArgs e) 
    at System.Web.UI.Control.LoadRecursive() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
+0

正確には 'tuplesUnits'とは何ですか? –

+0

スタックトレースとは何ですか? – SLaks

+0

@ジェフそれは辞書です。上記のコードを追加しました。 – Keyo

答えて

3

は、ここでの時計です。

if (unitsInTuple == null) { 
      ... 
      unitsInTuple.Add(tupleUnits.Key, tupleR); 
      ... 
     } 
    } 
+0

UnitsInTupleが2行目に作成されました – MGZero

+0

ありがとうございます。私は、unitsInTupleに新しいオブジェクトを割り当てることが、実際には何もしませんでしたが、 – Keyo

+0

投稿した例から初期化する必要があります - 私の推測では、クラスのどこかでnullに設定されているということです。 – saus

関連する問題