C#通用复制构造函数

blu*_*blu 5 c# generics clone interface

我有一个接口,以及两个实现接口的类.这些类具有泛型类型.我想从一个类的实例克隆到另一个类.

interface IFoo
{
    // stuff
}

class Foo<T> : IFoo
{
    // foo stuff
    // ifoo implementation
}

class Bar<T> : IFoo
{
    // bar stuff
    // ifoo implementation
}
Run Code Online (Sandbox Code Playgroud)

我有一个Foo,想要一个酒吧.Bar有一个复制构造函数,它带有IFoo的参数.我创建了一个扩展方法来实现克隆:

public static Bar<T> Clone<T>(this IFoo foo) 
{
    return new Bar<T>(foo);
}
Run Code Online (Sandbox Code Playgroud)

调用该方法需要以下类型:

someFoo.Clone<T> ...
Run Code Online (Sandbox Code Playgroud)

有没有办法在通过修改扩展方法或任何其他方式调用方法时省略声明类型,以允许实例只是传入而不关心它的底层类型?

更新 以下是如何使用它来更好地说明情况.

在一个方法中,我迭代一个集合并返回一个IFoo的枚举.在方法中,我查看源集合的属性并确定Foo的类型.

IFoo foo = null;

string type = element.Attribute("Type").Value;
switch (type)
{
    case "int":
        foo = new Foo<int>();
        break;

    case "string":
        foo = new Foo<string>();
        break;

    // etc
}
// other stuff

yield return foo;
Run Code Online (Sandbox Code Playgroud)

调用方法有一个List.后来我从这个列表中选择了单独的项目供我们使用,此时我想要一个Bar而不是一个Foo.从列表中选择时,实例的类型为IFoo,因为它们只能看到"this IFoo foo"的扩展方法.我不想将IFoo转换为Foo,这需要重新声明T的类型.我只想让Foo告诉Bar它是什么.这可能吗?

Nei*_*ell 0

这对启发有帮助吗?:你会如何改进这个浅层复制课程?

本质上,它是一种通用的基于反射的属性复制方法。试试看。