在没有完整类型声明的情况下将字典创建为参数的更短方法

时间:2019-03-31 07:35:47

标签: c# generics parameter-passing

对于下面对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 :(得分:0)

在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)
    {
    }