0

我正在尝试使用 C#/XAML 在 Visual Studio Express 2012 中为 Windows 8 开发一个 Windows 8 应用程序,但这样做时我遇到了一些问题。

我来自 Java 背景,对 C# 知之甚少。我正在尝试将 Java Enum 转换为 C#。

我偶然发现了Jon Skeet 的文章,它符合我的确切要求。但是从这个问题的评论和答案中,我意识到这是一个提议的想法。我的错!:)

然而,我在上述文章之后找到的最接近的翻译是这个: https ://stackoverflow.com/a/4778347/1127443

但是即使有了上面的实现,VS在Attribute中也找不到getCustomAttribute()方法。

如何在可以定义公共字段和抽象函数的 C# 中实现 Java 枚举的想法?基本上,我想带回枚举的概念,即作为具有特定实现的特定类的一组允许实例。

4

3 回答 3

1

为了尽可能接近您的代码,我将采取以下措施:

不要使用枚举,而是创建一个带有一些常量字段的静态类:

    public static class ArithmeticOperation
    {
        public static const Func<int, int, int> Addition = (x, y) => x+y;
        public static const Func<int, int, int> Subtraction = (x, y) => x - y;
        public static const Func<int, int, int> Multiplication = (x, y) => x * y;
        public static const Func<int, int, int> Division = (x, y) => x / y;
    }

您可以像使用任何其他方法一样使用它:

    static void Main(string[] args)
    {
        var result = ArithmeticOperation.Addition(1, 2);
    }

或者像枚举一样在参数中使用它:

    private int DoCalculation(Func<int, int, int> operation)
    {
           return operation(1, 2);
    }

    ...

     DoCalculation(ArithmeticOperations.Addition);

您可以将任何Func<int, int, int>作为参数传递,而不仅仅是 ArithmeticOperation 的属性。

于 2012-12-01T14:33:39.527 回答
1

这篇文章没有描述现有的 C# 特性,而是提出了一个建议,说明将来实现什么是好的。不起作用。

于 2012-12-01T14:22:38.780 回答
0

您应该阅读文章不仅要复制源代码

从您发布的文章中:

这篇文章是 C# 4.0 的功能建议。(我怀疑这种东西的盖子在 3.0 上已经关闭了。)

所描述的功能是试图让 C# 像 Java 一样增强枚举。但是现在这样的事情即使在 C# 4.0 中也不会发生。

编辑:

您希望使用 enum 获得什么类型的好处?在 Java 中,这样的实现是极其罕见的。

您应该了解枚举的概念,通常枚举用于具有人类可读的编译时间常数。我们没有使用数字 0、1、2、3,而是在代码别名中使用这些数字零、一、二、三。通常枚举用于存储一些最终结构,如日期、月份等名称。

我认为这就是 C# 不支持像 java 这样的枚举的原因。

于 2012-12-01T14:44:05.567 回答