繁体   English   中英

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

[英]Conditional Logic to connect generic .Net method arguments

我有一个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约束中表达。 听起来实际上您可以通过简单的重载来获得更好的收益……但是我们真的不知道该说些什么。

如果一个方法仅适合于几个类型参数或类型参数的几种组合,那么首先将其作为通用方法可能并不适合。

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

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

此处并不清楚“指定符”的含义,但听起来您可能希望将T2表示为与T1相关的接口。 例如,如果这些实际上是“实体”和“实体装饰器”类型,则您可能具有:

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

...,其中IDecorator<T>是新接口。 同样,仍然没有足够的信息要说,但是这种事情可能是有效的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM