【发布时间】:2010-10-08 11:23:18
【问题描述】:
我有一个接口和两个实现该接口的类。这些类具有泛型类型。我想从一个类的实例克隆到另一个类。
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 它是什么。这可能吗?
【问题讨论】:
-
也许我遗漏了一些东西,但如果你的扩展函数采用 IFoo,如果它是 Foo 类型,它应该如何将它“克隆”到 Bar 中?
-
我只关心 IFoo 属性中的值从 Foo 复制到 Bar。
标签: c# interface clone generics