我有一个函数可以确定记录值的字段大小(以字节为单位)。如果是字符串,我使用 Length 返回字节数。如果它不是字符串,我会调用另一个方法,该方法使用开关分配字节数。
这是我所拥有的:
private int getRecordFieldSize(PropertyInfo recordField,DataRecord dataRecord)
{
if (recordField.PropertyType.ToString() == "System.String")
{
return recordField.GetValue(dataRecord,null).ToString().Length;
}
else
{
int bytesOfPropertyType = getBytesBasedOnPropertyType(recordField.PropertyType.ToString());
return bytesOfPropertyType;
}
}
private int GetBytesBasedOnPropertyType(string propType)
{
switch(propType)
{
case "System.Boolean":
return 1;
case "System.Byte":
return 1;
case "System.SByte":
return 1;
case "System.Char":
return 1;
case "System.Decimal":
return 16;
case "System.Double":
return 8;
case "System.Single":
return 4;
case "System.Int32":
return 4;
case "System.UInt32 ":
return 4;
case "System.Int64":
return 8;
case "System.UInt64":
return 8;
case "System.Int16":
return 2;
case "System.UInt16":
return 2;
default:
Console.WriteLine("\nERROR: Unhandled type in GetBytesBasedOnPropertyType." +
"\n\t-->String causing error: {0}", propType);
return -1;
}
}
我的问题:有没有办法可以避免使用 switch 语句来分配字节?
我觉得应该有某种方法可以使用反射来获取字节数,但我在 MSDN 上找不到任何东西。
我对 C# 真的很陌生,所以请随意撕开我的代码。
谢谢