如何克隆对泛型类型的observablecollection的动态引用?

时间:2014-03-13 08:03:26

标签: c# generics dynamic collections

我有一个类:

class A    
{
    string name{get;set;}
    dynamic values{get;set;} // this can be either ObservableCollection of type string, or MyClass1 or MyClass2
}

我想克隆这个对象。 (可以使用浅层克隆的集合),下面是我现在正在做的事情,有没有更好的方法呢?

public A Clone()
{
    A obj = new A();
    obj.name = a.name;
    if(values is ObservableCollection<string>)
    {
        obj.values = new ObservableCollection<string>((ObservableCollection<string>)collection);
    }
    else if(values is ObservableCollection<MyClass1>)
    {
        obj.values = new ObservableCollection<MyClass1>((ObservableCollection<MyClass1>)collection);
    } 
    else if(values is ObservableCollection<MyClass2>)
    {
        obj.values = new ObservableCollection<MyClass2>((ObservableCollection<MyClass2>)collection);
    }
    return obj;
}

1 个答案:

答案 0 :(得分:0)

实际上它看起来像我的弱架构,我会尝试将其定义为至少为IEnumerable,而不是dynamic。但是内部使用可能没问题。

你可以这样试试:

public A Clone()
{
    A obj = new A();
    obj.name = name;
    obj.values = Activator.CreateInstance(values.GetType(), values);
    return obj;
}