有没有办法在C#中编写自我记录类型?

时间:2014-06-23 12:05:47

标签: c#

如果我有,例如字典:

private Dictionary<int, OrderSummary> _orderSummaries;

在C ++中我可能有:

typedef int OrderID;
private Dictionary<OrderID, OrderSummary> _orderSummaries;

表示字典键类型是订单ID。 C#中是否有等价物?

2 个答案:

答案 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; } }