我正在处理一个事件,它传递指向List和T newitem的事件args,我的工作是将newitem添加到List中.
如果不检查我所知道的所有类型,我怎么能这样做呢?
目前的代码是几十行:
private void DataGridCollectionViewSource_CommittingNewItem(object sender, DataGridCommittingNewItemEventArgs e)
{
Type t = e.CollectionView.SourceCollection.GetType();
if (t == typeof(List<Person>))
{
List<Person> source = e.CollectionView.SourceCollection as List<Person>;
source.Add(e.Item as Person);
}
else if (t == typeof(List<Place>))
{
List<Place> source = e.CollectionView.SourceCollection as List<Place>;
source.Add(e.Item as Place);
}
...
Run Code Online (Sandbox Code Playgroud)
我更喜欢是否有可能做这样的事情:
((List<T>) e.CollectionView.SourceCollection).Add((T)e.Item);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
请检查以下代码:
static void Main(string[] args) {
IList<dynamic> items = new List<dynamic>();
items.Add(3);
items.Add("solid");
dynamic i = new ExpandoObject();
items.Add(i); //System.Collections.Generic.IList<object>' does not contain a definition for 'Add'
Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)
这是"动态"机制中的错误吗?