如果我有,例如字典:
private Dictionary<int, OrderSummary> _orderSummaries;
在C ++中我可能有:
typedef int OrderID;
private Dictionary<OrderID, OrderSummary> _orderSummaries;
表示字典键类型是订单ID。 C#中是否有等价物?
答案 0 :(得分:4)
你可以使用类型别名,如下所示:
using OrderId = System.Int32;
但该别名仅在 源文件中有效。
每个其他源文件都会将您的字典视为Dictionary<int, OrderSummary>
。
这种别名主要用于消除具有相同名称的类型之间的歧义,而不是typedef
的替代。除了区分具有相同名称的类型之外,将它用于任何其他目的,IMO是一种不好的做法,实际上会妨碍可读性。
如果你的OrderId
确实具有特定且独特的语义含义,我建议创建自己的值类型来封装int。
答案 1 :(得分:1)
你可以做一个类型别名:using OrderId = System.Int32;
这只在该源文件中有效,所以它可能没有你想要的完全记录......
但是,如果你想在外部记录数据结构(字典)的意图,那么我将实现一个包装类:
public class OrderSummaries
{
private readonly Dictionary<int, OrderSummary> _orderSummaries;
public OrderSummary FindOrderSummary(int orderId)
{
return _orderSummaries[orderId];
}
...
}
您还可以指示包含单个struct
的{{1}}:
System.Int32
并使用public struct OrderId
{
public readonly Int32 Id;
public OrderId(int id)
{
Id = id;
}
}