如果值是元组,如何通过.TryGetValue()从字典中读取值?

c#

我有一个类型的字典

Dictionary<int, (float, float)>

尝试从中读取值时,我无法使用这种方式

if (myDict.TryGetValue(1, out (float tupleItem1, float tupleItem2))) { /* ... */ }

因为那样我会收到编译错误

它的工作方式是

if (myDict.TryGetValue(1, out (float, float) theTuple)) { /* ... */ }

有没有办法可以像这样直接初始化变量?

if (!myDict.TryGetValue(1, out (float tupleItem1, float tupleItem2)))
{
    /* handle if not found */
    tupleItem1 = 111;
    tupleItem2 = -12345;
}

回答

out不幸的是,您不能直接在参数中解构,请参阅此建议。

你必须自己解构它:

if (!myDict.TryGetValue(1, out var result))
{
    result = (111, -12345);
}

您可以使用扩展方法稍微改善这种情况:

public static class DictionaryExtensions
{
    public static TValue? TryGetValue<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key) where TValue : struct
    {
        return dict.TryGetValue(key, out var result) ? result : null;
    }
}

这让你写:

if (myDict.TryGetValue(1) is not (float tupleItem1, float tupleItem2))
{
    tupleItem1 = 111;
    tupleItem2 = -12345;
}


以上是如果值是元组,如何通过.TryGetValue()从字典中读取值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>