c# - 连接通用 .Net 方法参数的条件逻辑

标签 c# .net generics conditional-statements

我有一个 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 约束中无法表达。听起来实际上您可能使用简单的重载会更好......但我们真的不知道足够多的东西。

如果一个方法仅适用于少数类型参数 - 或几种类型参数的组合 - 那么它可能实际上并不适合作为泛型方法。

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

For more information T1 is basically a data object and T2 is a specifier that pertains to the T1 data object. All valid T1's are a certain base class while all valid T2's are a different base class.

这里不太清楚你所说的“说明符”是什么意思,但听起来你可能希望 T2 用与 T1 相关的接口(interface)来表达。例如,如果这些*实际上是“entity”和“decorator-for-entity”类型,您可能有:

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

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

关于c# - 连接通用 .Net 方法参数的条件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9690167/

相关文章:

c# - 如何解决 “does not contain a definition for ' ToObservableCollection'”错误?

c# - 我可以使用 Html Agility Pack 来解析 HTML 片段吗?

.net - 使用 .Net 进行文本挖掘、事实提取、语义分析

swift - 如何在 Swift 中创建通用的便利初始化器?

c# - Unity Player 正在向自己射击

c# - 将 Azure 队列 BrokeredMessage 标记为已成功处理?

generics - F# 编译器在 currying 时从首次使用泛型函数推断具体类型

c# - 使用队列创建 BackgroundWorker

c# - 在 Microsoft SQL Server 中一次对大量 XML 文件使用 Convert Style Option 2

c# - 什么是 C# 迭代器和生成器,我该如何使用它们