如果值是元组,如何通过.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;
}