相当于生锈的C#"匹配"

Sta*_*tan 6 c#

在Rust中有一个方便的声明叫做match.它的工作原理类似switch,但可能有多个变量.

以下是使用此技术进行fizz-buzz的伪示例:

match (i % 3 == 0, i % 5 == 0) {
    (false, false)  =>  { // },
    (true, true)    =>  { // FizzBuzz },
    (true, false)   =>  { // Fizz },
    (false, true)   =>  { // Buzz }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用C#7进行相同或类似的操作?

Pet*_*iho 3

为此,我将使用 C# 7 中的元组语法:

class Program
{
    enum FizzBuzz
    {
        None,
        Fizz,
        Buzz,
        FizzBuzz
    }

    static void Main(string[] args)
    {
        // Declare the map
        Dictionary<(bool, bool), FizzBuzz> matchMap =
            new Dictionary<(bool, bool), FizzBuzz>
            {
                {  (false, false), FizzBuzz.None },
                {  (true, true), FizzBuzz.FizzBuzz },
                {  (true, false), FizzBuzz.Fizz },
                {  (false, true), FizzBuzz.Buzz },
            };

        // Demonstration of the map
        for (int i = 0; i < 16; i++)
        {
            Console.WriteLine($"i: {i}, (i % 3 == 0, i % 5 == 0): {matchMap[(i % 3 == 0, i % 5 == 0)]}");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

目前,您需要使用 NuGet 包管理器将ValueTuple包添加到项目中以便编译语法。这些ValueTuple类型实现适当的相等比较以允许字典工作。