我在C#Brain teasers http://www.yoda.arachsys.com/csharp/teasers.html上浏览了Jon skeet网站.为什么项目"Baz"在输出中显示,即使我为枚举中的所有项目声明了默认值
---例如:1
class Test
{
enum Foo { Bar, Baz,bread, jam };
const int One = 1;
const int Une = 1;
static void Main()
{
Foo f = 0;
Console.WriteLine(f);
Console.ReadLine();
}
}
// output :Bar
Run Code Online (Sandbox Code Playgroud)
--eg2
class Test
{
enum Foo { Bar, Baz,bread=0, jam };
const int One = 1;
const int Une = 1;
static void Main()
{
Foo f = 0;
Console.WriteLine(f);
Console.ReadLine();
}
}
//output : Bar
Run Code Online (Sandbox Code Playgroud)
--eg3
class Test
{
enum Foo { Bar, Baz=0, bread=0, jam };
const int One = 1;
const int Une = 1;
static void Main()
{
Foo f = 0;
Console.WriteLine(f);
Console.ReadLine();
}
}
//output :Baz
Run Code Online (Sandbox Code Playgroud)
--eg4
class Test
{
enum Foo { Bar=0, Baz=0, bread=0, jam=0};
const int One = 1;
const int Une = 1;
static void Main()
{
Foo f = 0;
Console.WriteLine(f);
Console.ReadLine();
}
}
//output:Baz
Run Code Online (Sandbox Code Playgroud)
对于 .NET 来说,枚举只是整数。任何时候你将它们视为一个名称(例如 )ToString()
,你实际上是在说“尝试找到一个与整数值匹配的定义的枚举标签,并告诉我它的名称”。在这种情况下,你有多个枚举标签相同的整数值,因此 which name inWriteLine
未定义。请注意,WriteLine
这里最终执行的是f.ToString()
,它应用了上面的“查找值”逻辑。
对于--eg5
,我建议:Foo f = (Foo)-1327861;
。在 .NET 术语中完全有效,但与任何枚举定义不匹配。没必要。
归档时间: |
|
查看次数: |
166 次 |
最近记录: |