【问题标题】:Using different comparison operators based on conditional logic基于条件逻辑使用不同的比较运算符
【发布时间】:2019-09-02 21:19:41
【问题描述】:

我不想在我的应用程序中复制大量代码,所以我想做以下事情。

// PSEUDO CODE

if (next == true) {operator = "<=";}
else {operator = ">=";}

// Should use "row >= nowRow" or "row <= nowRow" to avoid having repeated code
if (row.Count operator nowRow) { ... }

有什么建议吗?

【问题讨论】:

  • 对不起,应该写成“替换”
  • 我建议阅读 docs.microsoft.com/en-us/dotnet/api/… 。并且可能使用Dictionary,其中值为Func
  • 您可以编辑您的问题以修正明显的拼写错误

标签: c# operators conditional-statements


【解决方案1】:

你可以使用 lambda 表达式来做类似的事情

var compare = next ? (Func<int,int,bool>)((l, r) => l <= r) : ((l, r) => l >= r);

if(compare(rowDat.Count, nowRow))
{
}

【讨论】:

    【解决方案2】:

    您可以将函数分配给委托类型的变量。 在您的情况下,Func&lt;T1,T2,TResult&gt; Delegate 是合适的。

    Func<int, int, bool> func = (x,y) => x <= y;
    Console.WriteLine(func(1,2));
    

    【讨论】:

    • 非常感谢 Ken 和 Lesiak。我什至从未想过代表,这对我来说已经有一段时间了。我非常感谢如此迅速的帮助
    • 嗨 Lesiak,我无法在 VS2019 上编译它。它说在“(x,y)”之后需要一个逗号。但是在那之后它也没有工作。我也直接从网页上剪切并粘贴了它。我使用了基思的答案,效果很好。对不起拼写;我的手指太胖了,而且我患有心肺综合征。
    • 它更像是一个编译器版本而不是 ide 版本问题(尽管对委托和 lambdas 的支持已经有一段时间了)。这是在 .NET 4.7 dotnetfiddle.net/EwDVIB 上运行的示例,如果您需要更多帮助,您需要发布您的确切代码和编译器版本。
    • 事实上,这个版本现在确实在我的 VS2019 .NET4.7.2 API 中工作了。我唯一能想到的是,当我从 Lesiak 的其他网页复制它时,它可能包含不可见的坏或损坏的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    相关资源
    最近更新 更多