考虑以下情况:
var dic = new Dictionary<string, (int, int)>()
{
["A"] = (1, 2)
};
dic.TryGetValue("A", out (int, int) value);
我可以轻松地从字典中获取value
,但是如何将其解构以获取每个单独的值,就像这样:
dic.TryGetValue("A", out var (left, right));
考虑以下情况:
var dic = new Dictionary<string, (int, int)>()
{
["A"] = (1, 2)
};
dic.TryGetValue("A", out (int, int) value);
我可以轻松地从字典中获取value
,但是如何将其解构以获取每个单独的值,就像这样:
dic.TryGetValue("A", out var (left, right));
dic.TryGetValue("A", out var (left, right));
这种语法目前还不支持,可能会在未来添加。 参考链接
你可以像这样为元组元素命名。
if(dic.TryGetValue("A", out (int left, int right) t))
{
var (left, right) = (t.left, t.right);
// use (left, right) or directly use (t.left, t.right)
}
我想不出更短的语法,这只是时间问题。C# 7 的发展比以前更快,所以你只需要等待。
out var t
来缩短代码,然后再用 var (left,right)=t;
解构它。 - Panagiotis KanavosTryGetValue("A", out var t) && t is var (left, right)
的方式实现。 - Markus Jarderot!TryGetValue
(当它不存在时),你将无法解构,因为&&
谓词不会被评估,而且left
和right
将被视为未初始化。有点遗憾。 - Kirk Woll
struct
! - MaYaN