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”代码>。