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

本文关键字:条件逻辑 参数 方法 泛型 Net 连接 | 更新日期: 2023-09-27 18:27:52

我有一个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方法参数的条件逻辑

听起来你想要的东西在.NET约束中是无法表达的。听起来实际上,你可能会通过简单的重载过得更好。。。但我们真的不知道该说什么。

如果一个方法只适合少数类型参数,或者少数类型参数的组合,那么它可能一开始就不适合作为泛型方法。

编辑:考虑到这些信息,它可能更有意义:

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

这里的"说明符"是什么意思还不清楚,但听起来你可能希望T2用一个与T1相关的接口来表示。例如,如果这些类型实际上是"entity"answers"decorator For entity"类型,则可能有:

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

其中CCD_ 1是新接口。同样,仍然没有足够的信息可以说明,但这类事情可以是一种有效的方法。