我希望在 C# 中看到更好的元组语法,例如。
var rgb = (1.0f, 1.0f, 1.0f);
// Inferred to be Tuple<float, float, float>
// Translated to var rgb = Tuple.Create(1.0f, 1.0f, 1.0f)
和
var x, y, z = rgb;
// Translated to:
// float x = rgb.Item1;
// float y = rgb.Item2;
// float z = rgb.Item3;
C# 语言中是否有任何内容禁止这样做,或者使其难以/不切实际地实现?也许还有其他语言功能会直接与此冲突?
请注意,我不是在问这是否在微软的雷达上,或者即使它是否符合他们对 C# 的愿景,只是在理论上是否存在任何明显的障碍。
编辑 以下是其他 CLI 语言的一些示例
// Nemerle - will use a tuple type from a language specific runtime library
def colour = (0.5f, 0.5f, 1.0f);
def (r, g, b) = colour;
// F# - Will use either a library type or `System.Tuple` depending on the framework version.
let colour = (0.5f, 0.5f, 1.0f)
let (r, g, b) = colour
// Boo - uses CLI array
def colour = (0.5, 0.5, 1.0)
def r, g, b = colour
// Cobra - uses CLI array
var colour = (0.5, 0.5, 1.0)
var r, g, b = colour
虽然使用数组似乎是一个很好的折衷方案,但在混合类型时它会变得有限,例如。let a, b = (1, "one")
F# 或 Nemerle 会给我们一个Tuple<int, string>
. 在 Boo 或 Cobra 中,这会给我们一个object[]
.
在 C# 7 中添加了对元组的Edit2 语言支持 - https://www.kenneth-truyers.net/2016/01/20/new-features-in-c-sharp-7/