我有一个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都是不同的基类。它们是两个不同的类,但总是一起使用。 我试图避免的问题是在代码数据中有一个不同的说明符,它与传入的数据不一致。
答案 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>
是一个新界面。同样,仍然没有足够的信息可以说,但这种事情可以是一种有效的方法。