У меня есть DataSource
в моем контроле, который всегда равен List<T>
, где T
должен наследовать от IEntity
.
public class MyClass<T> where T : IEntity
{
public List<T> DataSource
{
get;
set;
}
}
Теперь, очевидно, вы не можете разыграть List<T>
до List<IEntity>
, выполнив следующее:
List<IEntity> wontWork = (List<IEntity>)this.DataSource;
Как я могу получить источник данных в виде списка IEntity
, при этом все еще имея возможность добавлять и удалять элементы из DataSource
? То есть Я мог бы сделать следующее, но удаление из списка, который он возвращает, не приведет к удалению из источника данных:
public List<TOut> GetDataSourceCopyAsUnderlyingType<TOut>()
{
if (this.DataSource == null)
{
return new List<TOut>();
}
else
{
// Get the list and the enumerator
IList list = (IList)this.DataSource;
IEnumerator enumerator = list.GetEnumerator();
// Build the target list
List<TOut> targetList = new List<TOut>();
int i = 0;
while (enumerator.MoveNext())
{
TOut entity = (TOut)list[i];
targetList.Add(entity);
i++;
}
return targetList;
}
}
По сути, мне нужен какой-то способ сделать следующее:
List<IEntity> interfaceList = this.GetDataSourceAsAnotherType<IEntity>();
int dataSourceCount = this.DataSource.Count; // Equals 5
int interfaceCount = interfaceList.Count; // Equals 5
interfaceList.RemoveAt(0);
int dataSourceCount = this.DataSource.Count; // Equals 4
int interfaceCount = interfaceList.Count; // Equals 4
И просто добавлю, я не против, если это означает, что я должен использовать другой тип вместо списка.
EDIT : Извините, забыл сказать, что я использую .Net2.0 и не могу перейти на .Net 3.5.