将类型T的对象添加到类型List <t>的对象中

时间:2019-05-17 05:47:17

标签: c#

我正忙于建立自己的财产网格。我目前正在努力解决的问题之一是处理馆藏。专门将新项目添加到集合中。

我有一个名为CollectionDataSource的对象,它是一个包含T类型对象的列表。

我正在获取T的类型并按如下方式创建一个新的T对象:

var type = CollectionDataSource.GetType().GetGenericArguments().Single();
var newItem = Activator.CreateInstance(type);

现在我需要将newItem添加到CollectionDataSource。问题是CollectionDataSource是对象类型。我尝试过转换为IEnumerable和ICollection,但是这些接口无法添加新项目。

如何将newItem添加到CollectionDataSource?

UPDATE

请在下面查看我的答案。我要做的只是将集合转换为IList。那对我来说成功了

3 个答案:

答案 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);