gpt4 book ai didi

另一个元组构造函数中的 C# 元组析构函数

转载 作者:行者123 更新时间:2023-12-03 16:20:37 26 4
gpt4 key购买 nike

是否有 C# 功能可以将元组解构为另一个元组的子集字段?

public (bool, int) f1() => (true, 1);
public (double, bool, int) f2 => (1.0, f1() /*!!here!!*/);
谢谢!

最佳答案

目前没有这样的 C# 特性,所以你必须写 f2()作为

public (double, bool, int) f2()
{
var tuple = f1();
return (1.0, tuple.Item1, tuple.Item2);
}
但是,如果您真的想要,您可以编写一个辅助类来组合元组:
public static class TupleCombiner
{
public static (T1, T2, T3) Combine<T1, T2, T3>(T1 item, (T2, T3) tuple)
{
return (item, tuple.Item1, tuple.Item2);
}

public static (T1, T2, T3) Combine<T1, T2, T3>((T1, T2) tuple, T3 item)
{
return (tuple.Item1, tuple.Item2, item);
}

// Etc for other combinations if needed
}
那么如果你把 using static YourNamespace.TupleCombiner;在代码文件的顶部,您的代码如下所示:
public static (bool, int)         f1() => (true, 1);
public static (double, bool, int) f2() => Combine(1.0, f1());
public static (bool, int, double) f3() => Combine(f1(), 1.0);
当然,这也适用于 var方法内部的声明:
public static void Main()
{
var tuple = Combine(1.0, f1());
}
我不相信这在任何方面都值得,但这是一种选择。
另请注意 - 正如/u/Ry- 在评论中指出的 - 有 a proposal for tuple "splatting"在 Github 上,但该提案已超过三年(而且它似乎并不完全符合您的要求)。

关于另一个元组构造函数中的 C# 元组析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63612208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com