代码之家  ›  专栏  ›  技术社区  ›  astef

在KeyValuePair结构中解构方法的目的是什么?

  •  2
  • astef  · 技术社区  · 7 年前

    我在看 System.Collections.Generic.KeyValuePair<TKey, TValue> 结构输入 System.Runtime, Version=4.2.1.0 这个方法引起了我的注意。

    这是签名:

    public void Deconstruct(out TKey key, out TValue value);
    

    除了简单的转发之外,它是否包含任何逻辑 Key Value 财产?为什么有人会更喜欢它而不是地产商?

    1 回复  |  直到 7 年前
        1
  •  10
  •   Douglas    6 年前

    解构是一个主要针对C#7中的值元组引入的功能,它允许您“在一次操作中解压元组中的所有项”。语法已经被泛化,允许它也用于其他类型。通过定义 Deconstruct 方法,然后可以使用简明的解构语法将内部值分配给各个变量:

    var kvp = new KeyValuePair<int, string>(10, "John");
    var (id, name) = kvp;
    

    您甚至可以通过定义这样的 方法 out void 返回类型,如您的示例中所示。见 Deconstructing user-defined types

    编辑 :虽然.NET框架和.NET核心都支持C#7解构语法,但是 KeyValuePair<TKey,TValue>.Deconstruct 方法当前仅在.NET Core 2.0及更高版本中受支持。请参阅上一链接中的“应用于”部分。

        2
  •  2
  •   lazer    6 年前

    KeyValuePairTest(new KeyValuePair<string, string>("Hello", "World"));
    KeyValuePairTest(new KeyValuePair<int, int>(5,7));
    
    private static void KeyValuePairTest<TKey, TValue>(KeyValuePair<TKey,TValue> keyValuePair)
    {
        var (k, v) = keyValuePair;
        Console.WriteLine($"Key {k}, value is {v}");
    
        switch (keyValuePair)
        {
            case KeyValuePair<string, string> t:
                Console.WriteLine(t.Key + " " + t.Value);break;
            case KeyValuePair<int, int> t:
                Console.WriteLine(t.Key + t.Value); break;
        }
    }