using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
enum orientation : byte
{
north = 1,
south = 2,
east = 3,
west = 4
} struct route
{
public orientation direction;
public double distance;
} class Program
{
static void Main(string[] args)
{
route myRoute;
int myDirection = -1;
double myDistance;
Console.WriteLine("1.东\n2.南\n3.西\n4.北");
do
{
Console.WriteLine("请选择一个方向:");
myDirection = int.Parse(Console.ReadLine());
}
while ((myDirection < 1) || (myDirection > 4));
Console.WriteLine("输入一个距离:");
myDistance = double.Parse(Console.ReadLine());
myRoute.direction = (orientation)myDirection;
myRoute.distance = myDistance;
Console.WriteLine("方向:{0} 距离:{1}", myRoute.direction, myRoute.distance);
}
}
}myRoute.direction = (orientation)myDirection;是用转换值,然后赋给枚举的。
但是,orientation myDirection = (orientation)Enum.Parse(typeof(orientation),myDirection是不是也能用来赋值前的转换。
《C#入门经典》说:
当然,这里必须小心。因为并不是所以的byte类型变量的值都可以映射为已定义的orientation值。orientation类型可以存储其他byte的值,所以不会直接产生一个错误,但会在应用程序的后面违反逻辑。这句话的意思是不是,如果用(orientation)myDirection这种方法转换不注意的话,会引起违反逻辑?
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication40
{
class Program
{
enum orientation : byte
{
north = 1,
south = 2,
east = 3,
west = 4
} static void Main(string[] args)
{
String myDirection = "1";
orientation direction = (orientation)Enum.Parse(typeof(orientation), myDirection);
Console.WriteLine(direction); myDirection = "5";
direction = (orientation)Enum.Parse(typeof(orientation), myDirection);
Console.WriteLine(direction); Console.Read();
}
}
}
1会输出north
如果是不小心转换个5会样输出个5,虽然不会出错,但明显不符合逻辑,本来想要输出一个方向却输出一个数字
可以(orientation)100000都没问题