用于连接泛型.Net方法参数的条件逻辑

时间:2012-03-13 18:48:16

标签: c# .net generics conditional

我有一个C#方法,如:

private static IEnumerable<T2> SomeMethod<T1, T2>(IEnumerable<T1> arg1)
{

}

我希望能够做一些条件逻辑,这样如果T1是A,那么T2就是B,依此类推。如果我只有这两个约束,这不是问题。但是,如果我也想要逻辑,例如T1是C,那么T2就是D。

检查可以在方法中完成,但编译时检查更可取。 我想要的是在方法的泛型where语句中指定它。

有没有办法用C#或任何其他.net语言执行此操作?

有关更多信息,T1基本上是一个数据对象,T2是一个与T1数据对象有关的说明符。所有有效的T1都是某个基类,而所有有效的T2都是不同的基类。它们是两个不同的类,但总是一起使用。 我试图避免的问题是在代码数据中有一个不同的说明符,它与传入的数据不一致。

1 个答案:

答案 0 :(得分:5)

听起来你想要的只是在.NET约束中无法表达的。这听起来实际上你可能可能更好地使用简单的重载...但我们真的不知道该怎么说。

如果一个方法只适用于几个类型的参数 - 或几个类型参数的组合 - 那么首先它可能不适合作为泛型方法。

编辑:鉴于此信息,它可能更有意义:

  

有关更多信息,T1基本上是一个数据对象,T2是一个与T1数据对象有关的说明符。所有有效的T1都是某个基类,而所有有效的T2都是不同的基类。

这里的“说明符”你的意思并不是很清楚,但听起来你可能希望T2用与T1相关的界面来表达。例如,如果这些是*实际上是“实体”和“装饰器实体”类型,您可能有:

private static IEnumerable<T2> SomeMethod<T1, T2>(IEnumerable<T1> arg1)
    where T2 : IDecorator<T1>

...其中IDecorator<T>是一个新界面。同样,仍然没有足够的信息可以说,但这种事情可以是一种有效的方法。