You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#实现类似F# Active Pattern的功能?求更优方案

更简洁的C#等价实现替代F# Active Pattern

你可以通过单一函数返回枚举类型的方式,模拟F# Active Pattern的逻辑,避免冗余的多个判断函数,实现和F#版本一致的简洁性:

首先定义一个表示奇偶性的枚举:

public enum Parity { Even, Odd }

然后编写一个封装判断逻辑的函数,对应F#里的Active Pattern函数:

private static Parity GetParity(int number) 
    => number % 2 == 0 ? Parity.Even : Parity.Odd;

最后实现TestNumber函数,利用switch表达式结合上述函数完成匹配:

string TestNumber(object n)
{
    if (n is not int x) 
        return $"{n} is Others";
    
    return GetParity(x) switch
    {
        Parity.Even => $"{x} is Even",
        Parity.Odd => $"{x} is Odd",
        _ => $"{x} is Others"
    };
}

// 调用示例
var result = TestNumber(7); // 输出 "7 is Odd"

优化说明

  • 这个实现只用到一个判断函数GetParity,和F#的Active Pattern一样,把奇偶判断的逻辑统一封装,避免了原C#版本中两个独立判断函数的冗余。
  • 先做类型检查再处理,让代码逻辑更清晰,也减少了switch里的重复类型匹配。

如果追求极致紧凑,也可以把判断逻辑内联到switch中,但提取成独立函数的方式更符合F# Active Pattern的封装思想,可读性和可维护性更好。

内容的提问来源于stack exchange,提问作者Rm558

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:50:30