我有一个接口和两个实现该接口的类。这些类具有泛型类型。我想从一个类的实例克隆到另一个类。
interface IFoo
{
// stuff
}
class Foo<T> : IFoo
{
// foo stuff
// ifoo implementation
}
class Bar<T> : IFoo
{
// bar stuff
// ifoo implementation
}
我有一个 Foo 并且想要一个 Bar。Bar 有一个带有 IFoo 参数的复制构造函数。我创建了一个扩展方法来实现克隆:
public static Bar<T> Clone<T>(this IFoo foo)
{
return new Bar<T>(foo);
}
调用该方法需要类型:
someFoo.Clone<T> ...
有没有办法通过修改扩展方法或任何其他方式在调用方法时省略声明类型,以允许只传入实例而不关心其底层类型?
更新 以下是如何使用它来更好地说明情况。
在一个方法中,我迭代一个集合并返回一个 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;
调用方法有一个 List。后来我从这个列表中选择了单个项目以供使用,此时我想要一个 Bar 而不是 Foo。从列表中选择时,实例的类型为 IFoo,因为它们只能看到“this IFoo foo”的扩展方法。我不想将 IFoo 强制转换为 Foo,这需要重新声明 T 的类型。我只想让 Foo 告诉 Bar 它是什么。这可能吗?