我正忙于建立自己的财产网格。我目前正在努力解决的问题之一是处理馆藏。专门将新项目添加到集合中。
我有一个名为CollectionDataSource的对象,它是一个包含T类型对象的列表。
我正在获取T的类型并按如下方式创建一个新的T对象:
var type = CollectionDataSource.GetType().GetGenericArguments().Single();
var newItem = Activator.CreateInstance(type);
现在我需要将newItem添加到CollectionDataSource。问题是CollectionDataSource是对象类型。我尝试过转换为IEnumerable和ICollection,但是这些接口无法添加新项目。
如何将newItem添加到CollectionDataSource?
UPDATE
请在下面查看我的答案。我要做的只是将集合转换为IList。那对我来说成功了
答案 0 :(得分:0)
为什么不首先将其转换为列表?
var myObject = something as List<object>;
if (myObject != null)
{
// successfully cast
}
else
{
// cast failed
}
或者您知道类型:
public static Object TryConvertTo<T>(string input)
{
Object result = null;
try
{
result = Convert.ChangeType(input, typeof(T));
}
catch
{
}
return result;
}
答案 1 :(得分:0)
T toAdd = Convert.ChangeType((IItemsSource)Activator.CreateInstance(type), typeof(T));
然后创建一个简单的Add方法:
public void Add<T>(T toAdd) where T: class { _list.Add(toAdd); }
答案 2 :(得分:0)
答案似乎很简单。我要做的就是将CollectionDataSource强制转换为(IList)。问题解决了
var type = CollectionDataSource.GetType().GetGenericArguments().Single();
var newItem = Activator.CreateInstance(type);
var a = (IList)CollectionDataSource;
a.Add(newItem);