在C#中如何为带命名成员的元组类型命名(类似C++ typedef)
为带命名元素的元组类型定义别名(C#)
注意:本问题并非“为元组类提供比"Item1", "Item2"更好的命名”这一问题的重复,上述问题聚焦于为元组元素分配名称,而本文要解决的是如何为带有命名元素的整个元组类型命名。
我在代码中使用带命名项的元组:
(string kind, string colour, string length) a = ("annual", "blue", "short"); var myKind = a.kind; var myColour = a.colour; var myLength = a.length;
希望给这个类型起一个自定义名称,实现类似C++typedef的效果,使用方式如下:
FlowerInformation a = ("annual", "blue", "short"); var myKind = a.kind; var myColour = a.colour; var myLength = a.length;
我尝试过用using指令定义别名:
using FlowerInformation = System.ValueTuple<string , string , string>;
但这种方式只能给ValueTuple类型起别名,丢失了元组元素的命名,使用时只能通过Item1/Item2/Item3访问成员:
FlowerInformation a = ("annual", "blue", "short"); var myKind = a.Item1; var myColour = a.Item2; var myLength = a.Item3;
直接用命名元组语法定义别名的写法也无法生效:
using FlowerInformation = (string kind, string colour, string length);
解决方案
在C#中,无法直接为带命名元素的元组类型定义别名——命名元组的元素名称只是编译期的语法糖,底层仍对应ValueTuple类型,这些名称不会被保留到运行时,也无法通过using别名绑定。
如果想要同时拥有自定义类型名称和命名成员,推荐以下两种方案:
方案1:定义自定义结构体/类
这是最清晰且符合C#习惯的方式,直接封装成结构体或类:
public struct FlowerInformation { public string Kind { get; } public string Colour { get; } public string Length { get; } public FlowerInformation(string kind, string colour, string length) { Kind = kind; Colour = colour; Length = length; } // 可选:添加解构方法,支持元组式解构 public void Deconstruct(out string kind, out string colour, out string length) { kind = Kind; colour = Colour; length = Length; } }
使用方式完全符合预期:
// 直接实例化 FlowerInformation a = new FlowerInformation("annual", "blue", "short"); // 或者用解构赋值 var (kind, colour, length) = a; var myKind = a.Kind; var myColour = a.Colour; var myLength = a.Length;
方案2:用工厂方法封装元组
如果坚持使用元组语法,可以通过静态工厂方法封装,间接实现类型语义:
public static class FlowerInformationFactory { public static (string kind, string colour, string length) Create(string kind, string colour, string length) { return (kind, colour, length); } }
使用时:
var a = FlowerInformationFactory.Create("annual", "blue", "short"); var myKind = a.kind; var myColour = a.colour; var myLength = a.length;
内容的提问来源于stack exchange,提问作者Natalia Zoń
相关产品推荐
相关产品推荐

