【发布时间】:2012-03-30 05:11:00
【问题描述】:
我有一个类似的 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 都是不同的基类。它们是两个不同的类,但总是一起使用。 我要避免的问题是代码数据和不同的说明符与一起传入的数据不符。
【问题讨论】:
-
你能举出条件的例子吗? .NET 类型系统只允许在泛型类型参数上放置几个非常特殊的条件。
-
你为什么要使用泛型来处理显然不是泛型的东西?下次你想敲钉子时,考虑用锤子代替反铲。 (Protip:泛型不是模板。如果您尝试像某种奇怪的字符串替换机制一样使用它们,那么您将进入一个 C++ 伤害的世界。)
标签: c# .net generics conditional