从单独类型的类数组中派生类型

时间:2018-02-28 01:39:27

标签: c# types

我试图找出将多个单独类型的类传递给方法的最佳方法。我事先不知道会有多少个单独输入的类被传递给方法,所以已经像这样启动了代码......

界面

public interface ITypedClass {}

已键入的类

public class TypedClass<T> : ITypedClass 
{
    public IEnumerable<T> Output() {} 
}

方法

public static void DoSomething(params ITypedClass[] typedClasses) {}

...并使用以下内容运行,其中DoSomething方法使用基于传递给DoSomething方法的集合的相应值填充类型化的类。

var typedClassA = new TypedClass<TypeA>();
var typedClassB = new TypedClass<TypeB>();
...
var typedClassN = new TypedClass<TypeN>();

DoSomething(typedClassA, typedClassB, ... typedClassN etc

var valueA - typedClassA.Output();
var valueB - typedClassB.Output();
...
var valueN - typedClassN.Output(); 

不幸的是在DoSomething方法中......

var typedClass = (TypedClass<T>)typedClasses.First();

... typedClasses参数中的各个值无法转换回TypedClass,因为DoSomething方法并不知道每个实例中的T是什么。

有人能想到更好的方法吗?

1 个答案:

答案 0 :(得分:0)

有了更多的想法,答案似乎有点明显。在明显终于点击之前的几个晚上不得不睡觉。没有DoSomething处理输入的输入,让TypedClass为你做,而是让DoSomething拆分工作。

新界面

public interface ITypedClass 
{
    void Input(object value);
}

新类型

此处Input方法处理从对象值到列表值

的转换
public class TypedClass<T> : ITypedClass 
{
    public List<T> value;
    public void Input(object value) {...}
    public IEnumerable<T> Output() => value;
}

新方法

DoSomething现在将工作分开......

public static void DoSomething(params ITypedClass[] typedClasses) 
{
    foreach (var c in typedClasses)
    {
        c.Input(...);
    }
}

现在调用以下内容......

var typedClassN = new TypedClass<TypeN>();
DoSomething(... typedClassN ... );
var valueN = typedClassN.Output(); 

valueN将有一个值,DoSomething可以处理可变数量的类型化类