将类型作为参数传递给属性

use*_*016 9 c# generics custom-attributes

我写了一个有点通用的反序列化机制,它允许我从C++应用程序使用的二进制文件格式构造对象.

为了保持清洁和易于更改,我创建了一个Field扩展的类,Attribute构造Field(int offset, string type, int length, int padding)并应用于我希望反序列化的类属性.这是它的样子:

[Field(0x04, "int")]
public int ID = 0;

[Field(0x08, "string", 0x48)]
public string Name = "0";

[Field(0x6C, "byte", 3)]
public byte[] Color = { 0, 0, 0 };

[Field(0x70, "int")]
public int BackgroundSoundEffect = 0;

[Field(0x74, "byte", 3)]
public byte[] BackgroundColor = { 0, 0, 0 };

[Field(0x78, "byte", 3)]
public byte[] BackgroundLightPower = { 0, 0, 0 };

[Field(0x7C, "float", 3)]
public float[] BackgroundLightAngle = { 0.0f, 0.0f, 0.0f };
Run Code Online (Sandbox Code Playgroud)

myClass.Decompile(pathToBinaryFile)然后,调用将从文件中提取数据,在适当的偏移处读取正确的类型和大小.

但是,我发现将类型名称作为字符串传递是丑陋的.

是否有可能以更优雅但更短的方式传递类型,以及如何?

谢谢.

Tho*_*que 7

使用typeof运算符(返回实例Type):

[Field(0x7C, typeof(float), 3)]
Run Code Online (Sandbox Code Playgroud)

  • 我只是通过字符串的可怕性来划分类型的真棒...正如你所看到的,这是一个非常准确的估计;) (4认同)