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

我想让IDictionaryIDictionary对它的含义不那么模糊,所以我想也许包装它会是一个好主意。 结果将类似于IDictionary

最好,finishPosition应该可以赋值,如finishPosition = 1

我不知道这是否可能以及如何。

您可以使用具有隐式转换的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 dict = new Dictionary(); 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)] 

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

using FinishPosition = System.Int32;

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

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

你可以使用枚举:

 enum Position { Finish, Some, Other } IDictionary lookup = ...; Driver d = lookup[Position.Finish]; 

在我看来,在一般值与特定意图一起使用的任何地方都可以使用AbstractDataType模式(这种情况已由许多其他人使用Percentage,ReadonlyString,ConnectionString等示例)

注意,我个人认为对它们进行隐式转换会使整个事情变得空洞(通过隐式转换,没有更多的编译器保证通用值在正确的位置使用特定的意图)。

这是一个应该激发你的方式的样本:你仍然可以选择你喜欢的方便/详细程度。 它显示了两种方法:

  • _byInt通过PseudoInt索引字典
  • _byEnum通过Enum:int类型索引字典

笔记

  • 如果您#define IMPLICIT_CONVERSIONS,您将获得对基本索引类型的隐式转换(因此要转换为int 枚举)
  • 这推断为所有值类型,包括用户定义的值(尝试使用XYZCoord结构:))
  • 如果您真的想要与Enum类型进行转换,请仔细查看

无需再费周折:

 #define IMPLICIT_CONVERSIONS using System.Collections.Generic; namespace NS { public enum PositionEnum : int { Begin = 0, Normal = 1, End = 99 } public struct Pseudo where T : struct { public T Value; public Pseudo(T value) { Value = value; } #if IMPLICIT_CONVERSIONS public static implicit operator T(Pseudo pi) { return pi.Value; } public static implicit operator Pseudo(T ni) { return new Pseudo(ni); } #endif } static class Program { private static Pseudo AsPseudo(this T value) where T : struct { return new Pseudo(value); } private static readonly IDictionary, string> _byInt = new Dictionary, string>() { { 0, "aap" }, { 1, "noot" }, { 99, "mies" }, }; private static readonly IDictionary, string> _byEnum = new Dictionary, string>() { { PositionEnum.Begin, "aap" }, { PositionEnum.Normal, "noot" }, { PositionEnum.End, "mies" }, }; public static void Main(string[] args) { string s; s = _byInt[0]; s = _byEnum[PositionEnum.Normal]; } } } 

我刚刚在[1]之前链接的问题中调整了RichEnum通用基类

我想我更喜欢这种方法,因为从长远来看它似乎是最灵活的。 我能想到的唯一缺点是,RichEnum类型不再是值类型。

转过头来看看我的意思(包括一个完全运行的样本):

[1] 我们可以在c#中定义枚举的隐式转换吗?