C# 查找枚举C中定义的项目总数#

C# 查找枚举C中定义的项目总数#,c#,C#,为什么我的代码不起作用 using System; namespace Enum { class Program { static void Main(string[] args) { Console.WriteLine(Test.FruitCount); } } public class Test { enum Fruits { Apple, Orange, Peach } public const int FruitCount =

为什么我的代码不起作用

using System;

namespace Enum
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Test.FruitCount);
    }
}

public class Test
{
    enum Fruits { Apple, Orange, Peach }
    public const int FruitCount = Enum.GetNames(typeof(Fruits)).Length;
}
}
我出错了

无法解析符号“GetNames”


为什么??如何解决这个问题?

因为您已经将它设置为一个常量,而该常量只能是编译时常量

这项工作:

enum Fruits { Apple, Orange, Peach }
static readonly int FruitCount = Enum.GetNames(typeof(Fruits)).Length;

常量是编译时已知的不可变值,在程序生命周期内不会更改

更新:您还必须将名称空间从
Enum
更改为其他名称空间

试试这个代码

public int fruitCount = Enum.GetValues(typeof(Fruits)).Length;

请记住将文件的名称空间从
Enum
更改为elese

,因为名称空间也是Enum。这使编译器感到困惑。试试这个:

namespace Enum
{
    class Program
    {
        static void Main(string[] args)
        {
            Test test = new Test();
            Console.WriteLine(test.FruitCount);
        }
    }

    public class Test
    {
        enum Fruits { Apple, Orange, Peach }
        public int FruitCount
        {
            get
            {
                return System.Enum.GetNames(typeof(Fruits)).Length;
            }
        }
    }
}

我基本上完全限定了Enum,使用
System.Enum.GetNames

将名称空间从Enum更改为其他名称下面有几个问题,正如人们所建议的,但主要问题和无法解析sumbol GetNames的原因是您的名称空间。如果你想了解更多细节,请查看下面的答案。这对我来说很好。。。和+1,因为如果只需要计数,那么获取值而不是名称更有效。我如何获取我的值?我尝试了这个,但是
Console.WriteLine(GetFruitCount.ToString())不起作用?
Test t=new Test();Console.WriteLine(t.GetFruitCount().ToString())
并且不要为类和名称空间使用相同的名称,因为无法从程序类访问FructCount,因为它是一个实例变量(这个问题也是其他问题之一)。查看上面的代码,了解您需要更改的内容,并询问我是否有任何问题。但是,如果我无法更改枚举中的值数量,为什么我无法创建此常量?@Heidel:C#编译器不会使用反射来执行
enum.GetNames
以获取值。所以它不知道它是什么。它必须是编译时常量。唯一可以是
const
的类型是那些用C#表示的文本类型,例如
const string Name=“Tim”+“+”Schmelter”