가 나는 그래서 초기화 기본 클래스의 목록이 카운트 1 Intitialized 첫 번째 위치에 널 (null) : I가 호출에 중단 점을 넣으면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"에 1이 있다고 알려준 후에 "_list"위로 커서를 놓으면 나타납니다. 지역 창을 볼 때 해당 목록에서 null 값을 가진 요소 [0]을 봅니다. 나는 _list.Clear(), _list.RemoveAt (0) _list.RemoveAll (술어)을 시도했지만 그 중 아무 것도 작동하지 않았다. 호출 코드는 목록의 첫 번째 요소를 유지하려고 시도하고 객체가 메소드를 호출 할 것으로 예상하기 때문에 중단됩니다. 첫 번째 요소가 "null"이기 때문에 익숙한 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"예외가 발생합니다. , 재정 ToString()
와 생성자 호출 할 때 ToString()
방법 의 속성을 초기화하는 것은 재산권을 초기화 :
다음은 전체 클래스 파일의 내용
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, Verifiable example] (http://stackoverflow.com/help/mcve)을 포함해야합니다. 그렇지 않으면 질문이 닫힐 수 있습니다. –