是否可以包装整数并将其称为整数?

Gar*_*ghi 6 c# c#-4.0

我想让int IDictionary<int, Driver>稍微不那么模糊它的含义,所以我想也许包装它会是一个好主意.结果将是这样的IDictionary<finishPosition, Driver>.

最好,finishPosition应该像这样分配finishPosition = 1.

我不知道这是否可行以及如何实现.

Mar*_*oms 5

当然,只需使用此using指令:

using FinishPosition = System.Int32;

在源文件的顶部,并像在示例中一样编写代码.

如果你使用这样的using指令,FinishPosition是一个int,其他文件将把它看作一个int - 没有定义新类型FinishPosition(感谢评论中的配置器).

  • 呃......不,不.问题可能是`FinishPosition` _is_一个`Int32`和其他文件会将它看作`int`.但它不会"隐藏"它或类似的东西......为什么会这样? (2认同)
  • 哈哈,这只是因为我错过了`使用System`./ facepalm:P我会编辑我的答案.这将教我在Notepad ++而不是VS中编写测试代码. (2认同)
  • 这是一种可能令人困惑的做法.它仍然是一个int.任何文档都会说它是一个它(在源文件中简称为Else.在编译时信息完全消失,不同文件中的intellisense应该报告为int.语法用于消除歧义 (2认同)

con*_*tor 5

您可以使用struct隐式转换.

public struct FinishPosition {
    public readonly int Position;

    public FinishPosition(int position) {
        this.Position = position;
    }

    public static implicit operator FinishPosition(int position) {
        return new FinishPosition(position);
    }
}


// ...

Dictionary<FinishPosition, Driver> dict = new Dictionary<FinishPosition, Driver>();
Driver bob = new Driver();

// The following two lines are effectively equivalent
dict[new FinishPosition(7)] = bob;
dict[7] = bob;

// So are these two
bob = dict[7];
bob = dict[new FinishPosition(7)]
Run Code Online (Sandbox Code Playgroud)