C#泛型复制构造函数

C#泛型复制构造函数,c#,generics,C#,Generics,我有一个泛型类,我想实现它的副本构造函数 public abstract class BaseClass<T> { protected T Data { get; set; } protected BaseClass(T other) { this.Data = other.Data; } } 公共抽象类基类 { 受保护的T数据{get;set;} 受保护基类(T其他) { this.Data=其他.Data; } }

我有一个泛型类,我想实现它的副本构造函数

public abstract class  BaseClass<T>
{
     protected T Data { get; set; }
     protected BaseClass(T other)
     {
          this.Data = other.Data;
     }

}
公共抽象类基类
{
受保护的T数据{get;set;}
受保护基类(T其他)
{
this.Data=其他.Data;
}
}
我得到编译错误,即
other

没有字段名
数据

我考虑过使用dynamic,因此构造函数签名将是基类(dynamic other),还有其他方法吗?

您的复制构造函数采用
T
类型参数,但您将其视为
基类

以下两种方法都可以解决您的问题,但由于您希望将其称为复制构造函数,因此第二种方法更适合您:

public abstract class  BaseClass<T>
{
    protected T Data { get; set; }
    protected BaseClass(T other)
    {
        this.Data = other;
    }
}
公共抽象类基类
{
受保护的T数据{get;set;}
受保护基类(T其他)
{
这个数据=其他;
}
}
秒:

public abstract class  BaseClass<T>
{
    protected T Data { get; set; }
    protected BaseClass(BaseClass<T> other)
    {
        this.Data = other.Data;
    }
}
公共抽象类基类
{
受保护的T数据{get;set;}
受保护基类(基类其他)
{
this.Data=其他.Data;
}
}

dynamic不起作用-
t
没有名为
Data
的属性。您应该在构造函数中接受
基类
,或者将代码更改为
this.Data=other
(取决于您的需要)。然而,这充其量只是一个浅拷贝-您希望您的拷贝能深入到多深?出于一般目的,我希望它是一个深拷贝,因为我希望在TWell上强制执行IClonable,然后只添加一个一般约束,说明T必须实现IClonable-easy:-)