Более короткий способ создания словаря в качестве параметра без полного объявления типа - PullRequest
0 голосов
/ 31 марта 2019

Для вызова Test2() ниже, есть ли в любом случае, чтобы сделать его короче, чтобы пропустить явную печать?

class Program
{
    static void Main(string[] args)
    {
        Test(("a", (1, "b")));
        Test2(new Dictionary<string, (int, string)>()
                { {"a", (1, "b") } });
    }

    static void Test((string, (int, string)) data)
    {
    }
    static void Test2(Dictionary<string, (int, string)> data)
    {
    }
}

1 Ответ

0 голосов
/ 01 апреля 2019

В C # определенная вами конструкция может подходить ко многим типам, поэтому она не может означать словарь.

Ниже я использую ключевое слово params, чтобы принять массив указанного вами типа кортежа, а затем создаю из него словарь для вызова метода, который ожидает словарь.

    private static void Main(string[] args)
    {
        Test(("a", (1, "b")));
        TestWrap(
            ("a", (1, "b")), 
            ("b", (3, "c"))
            );
    }

    private static void Test((string, (int, string)) data)
    {
    }

    private static void TestWrap(params (string, (int, string))[] data)
    {
        Test2(data.ToDictionary(v => v.Item1, v => v.Item2));
    }

    private static void Test2(Dictionary<string, (int, string)> data)
    {
    }
...