我试图找出将多个单独类型的类传递给方法的最佳方法。我事先不知道会有多少个单独输入的类被传递给方法,所以已经像这样启动了代码......
界面
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是什么。
有人能想到更好的方法吗?
答案 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
可以处理可变数量的类型化类