最近做一个项目,需要将客户端版移植到flash平台上,服务器端仍然使用原来的。这样服务端定义的一些枚举需要在flash as3中实现一份。as3本身没有枚举这种类型,一般使用 public static const 来模拟实现。如果枚举数量少的话可以把枚举名手动拷贝过去,一旦枚举数量很大工作量会成倍增加,所以需要写一个小程序来自动帮我们做到。
原来的项目是用C++写的,之所以使用C#来写这个小程序是利用了C#枚举的特性:可以遍历枚举,并能获得枚举字符串。另外C/C++枚举格式和C#的一致,所以可以直接把C/C++的枚举拷贝过来执行。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace enumtoas3
{
class Program
{
private enum COLOR
{
RED,
GREE,
BLUE,
}
static void Main(string[] args)
{
FileStream fileStream = null;
StreamWriter streamWriter = null;
string text = "package\r\n{\r\n\tpublic final class Color\r\n\t{\r\n";
fileStream = new FileStream("Color.as", FileMode.Create);
streamWriter = new StreamWriter(fileStream);
foreach (COLOR c in Enum.GetValues(typeof(COLOR)))
{
text += "\t\tpublic static const " + c.ToString() + " :int = " + c.GetHashCode() + ";\r\n";
}
text += "\t}\r\n}";
streamWriter.Write(text);
streamWriter.Close();
}
}
}
输出的Color.as3文件内容如下:
package
{
public final class Color
{
public static const RED :int = 0;
public static const GREE :int = 1;
public static const BLUE :int = 2;
}
}
当然除了as3外,其他语言同样可以。