【问题标题】:How to obtain one value by index (int) in enum, in unidimentional enum in C#如何通过枚举中的索引(int)获取一个值,在C#中的单向枚举中
【发布时间】:2016-01-19 11:43:02
【问题描述】:

我找不到与一维枚举相关的这个问题,我认为与二维枚举不同,所以让我们开始吧。

假设我有这个枚举:

public enum TileType {Empty, Floor};

我的班级中有这些元素:

private TileType _type = TileType.Empty;

public TileType Type {
        get {
            return _type;
        }
        set {
            TileType oldType = _type;
                _type = value;
            }
    }

如何在 C# 中使用索引 (int) 获取“Empty”或“Floor”以检索它们?

而且,就像一个没有任何优先级的附带问题......

您将如何检索存储在“oldType”TileType 中的信息? (这个子问题,如果你想让它回答,请在cmets中回答)

PS:我们假设这个问题的目的比我们已经认为的枚举是这段代码中要走的路,而且我已经检查了其他类型列表的有用性。

对此问题的任何改进或澄清请求也将不胜感激

提前致谢

【问题讨论】:

  • 谢谢,我在任何地方都找不到,这正是我需要的。但是还有更接近 Dictionary.GetKey() 方法的方法吗?

标签: c# indexing enums get int


【解决方案1】:

枚举未编入索引,但它们确实具有基础值...在您的情况下 Empty 和 Floor 分别为 0 和 1。

要引用TileType.Floor,你可以使用这个:

var floor = (TileType)1;

由于您询问了 Dictionary.GetKey() 之类的问题,因此 Enum 类中有可用的方法,但没有完全类似的方法。

您可以编写自己的扩展方法。试试这个,例如:

public static class EnumExt
{
    public static T GetKey<T>(int value) where T : struct
    {
        T result;

        if (!Enum.TryParse(value.ToString(), out result))
            // no match found - throw an exception?

        return result;
    }
}

然后您可以调用:

var floor = EnumExt.GetKey<TileType>(1);

【讨论】:

    【解决方案2】:

    试试这个,我相信类似的问题? Retrieve value of Enum based on index - c#

    您应该将 oldType 作为变量放在 Type 属性之外。

    【讨论】:

    • 非常感谢,但问题是这个问题对具有单维枚举的新人没有帮助,我想更“用户友好”或“新手友好”的东西将有助于在枚举中引入在尝试之前,无论如何,感谢您的尝试。
    • 我相信这个可以帮助你开始 (msdn.microsoft.com/en-us/library/cc138362.aspx)。 Enum.GetName(typeof(TileType), 1);
    猜你喜欢
    • 2014-02-02
    • 2011-09-06
    • 2010-10-30
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多