は私がように、それを初期化し、基本クラス内のリストを持ってカウント1でIntitializedと最初の位置にヌル:私はへの呼び出しにブレークポイントを置く場合C#一覧<>
protected List<T> _list = null;
#region Overrides
public override DataTable YieldTable()
{
DataRow[] cln = new DataRow[_list.Count];
T bob;
DataRowCollection item;
for (int i = 0; i < _list.Count; i++)
{
bob = _list[i];
item = bob.YieldTable().Rows;
if (item.Count > 0)
cln[i] = item[0];
}
DataTable tbl = cln.CopyToDataTable();
return tbl;
}
public override string ToCSV(bool includeHeader = true)
{
StringBuilder csv = new StringBuilder();
int i;
int n;
T item;
if (_list == null || _list.Count < 1)
{
_list = new List<T>(1);
_list.Add(default(T));
}
i = 0;
n = _list.Count;
//item = _list[0];
//csv.AppendLine(item.ToCSV());
for (i = 0/*1*/; i < n; i++)
{
item = _list[i];
csv.AppendLine(item.ToCSV(includeHeader));
if (includeHeader) includeHeader = false;
}
return csv.ToString();
}
public override string ToString()
{
return ToCSV();
}
#endregion Overrides
protected void DoInitializeCollection()
{
_list = new List<T>();
}
"new"を実行し、それを例外なく実行することができます。新しいintellisenseへの呼び出しの後に "_list"にカーソルを置くと、 "_list"に1のカウントがあることがわかります。ローカルウィンドウを見ると、そのリストの要素[0]が値nullで表示されます。私は_list.Clear()、_list.RemoveAt(0)_list.RemoveAll(述語)を試してみましたが、どれもうまくいきませんでした。呼び出しコードは、リスト内の最初の要素を保持しようとし、オブジェクトがメソッドを呼び出すことを期待しているため、ブレークします。最初の要素が「null」であるため、使い慣れた「オブジェクト参照がオブジェクトのインスタンスに設定されていません」例外が発生します。
ここは、クラス全体のファイルの内容である
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Linq;
using System.Collections;
namespace AIMS.Objects
{
static class Extensions
{
public static IList<T> Clone<T>(this IList<T> listToClone) where T :
ICloneable
{
return listToClone.Select(item => (T)item.Clone()).ToList();
}
}
public class BusinessCollectionBase<T> : BusinessObjectBase where T : BusinessObjectBase
{
#region Variables
protected List<T> _list = null;
#endregion Variables
#region Constructors
public BusinessCollectionBase(int capacity)
{
_list = new List<T>(capacity);
}
public BusinessCollectionBase()
{
DoInitializeCollection();
}
#endregion Constructors
#region Properties
public T this[int i]
{
get
{
if (_list == null || i < 0 || i >= _list.Count)
throw new IndexOutOfRangeException("Attempt to read internal list at location " + i.ToString());
return _list[i];
}
set
{
if (_list == null || i < 0 || i >= _list.Count)
throw new IndexOutOfRangeException("Attempt to write internal list at location " + i.ToString());
_list[i] = value;
}
}
public List<T> InternalList
{
get
{
return _list;
}
set
{
_list = value;
}
}
public int Count
{
get
{
if (_list == null)
return 0;
return _list.Count;
}
}
#endregion Properties
#region API
public void SortById()
{
_list.Sort((x, y) => x.Id.CompareTo(y.Id));
}
#region Static
protected static DataRowCollection Get(string sp, Dictionary<string, string> parms)
{
DataTable cln = BusinessObjectBase.GetDataTable(sp, parms);
return cln.Rows;
}
protected static DataSet Set(string sp)
{
DataSet ds = BusinessObjectBase.GetSet(sp);
return ds;
}
#endregion Static
#endregion API
#region Overrides
public override DataTable YieldTable()
{
DataRow[] cln = new DataRow[_list.Count];
T bob;
DataRowCollection item;
for (int i = 0; i < _list.Count; i++)
{
bob = _list[i];
item = bob.YieldTable().Rows;
if (item.Count > 0)
cln[i] = item[0];
}
DataTable tbl = cln.CopyToDataTable();
return tbl;
}
public override string ToCSV(bool includeHeader = true)
{
StringBuilder csv = new StringBuilder();
int i;
int n;
T item;
if (_list == null || _list.Count < 1)
{
_list = new List<T>(1);
_list.Add(default(T));
}
i = 0;
n = _list.Count;
//item = _list[0];
//csv.AppendLine(item.ToCSV());
for (i = 0/*1*/; i < n; i++)
{
item = _list[i];
csv.AppendLine(item.ToCSV(includeHeader));
if (includeHeader) includeHeader = false;
}
return csv.ToString();
}
public override string ToString()
{
return ToCSV();
}
#endregion Overrides
#region Virtual
protected void DoInitializeCollection()
{
_list = new List<T>(0);
}
public virtual void Add(T item)
{
_list.Add(item);
}
public virtual void AddRange(BusinessCollectionBase<T> bob)
{
foreach (T b in bob.InternalList)
{
this.InternalList.Add(b);
}
}
public virtual List<T> GetDistinct(string byField, bool sortItToo = false)
{
if (_list == null)
return new List<T>();
ArrayList uniqueVins = new ArrayList();
List<T> newList = new List<T>();
foreach (T t in _list)
{
if (t._properties[byField] != null && !uniqueVins.Contains(t._properties[byField]))
{
if (!string.IsNullOrEmpty(t._properties[byField].ToString()))
{
uniqueVins.Add(t._properties[byField].ToString());
newList.Add(t);
}
}
}
if (sortItToo)
{
// This shows calling the Sort(Comparison(T) overload using
// an anonymous method for the Comparison delegate.
// This method treats null as the lesser of two values.
newList.Sort(delegate(T x, T y)
{
if (x._properties[byField] == null && x._properties[byField] == null) return 0;
else if (x._properties[byField].ToString() == null) return -1;
else if (y._properties[byField].ToString() == null) return 1;
else return x._properties[byField].ToString().CompareTo(y._properties[byField].ToString());
});
}
return newList;
}
#endregion Virtual
#region Helper Methods
protected List<T> FilterOut(Predicate<T> p)
{
if (this.Count < 1)
return null;
List<T> filtered = _list;
filtered.RemoveAll(p);
return filtered;
}
#endregion Helper Methods
}
}
地域のウィンドウのスクリーンショットを作成し、質問に追加してください。また、あなたが提供したコードで問題を再現することはできません。 –
基本クラスと派生クラスを表示してください。何かがそれを別々に初期化しています。 –
そのまま問題は再現できません。質問に[Minimal、Complete、and Verifiable example](http://stackoverflow.com/help/mcve)を含める必要があります。そうしないと、質問がクローズされる可能性があります。 –