我有一個函數可以確定記錄值的字段大小(以字節爲單位)。如果它是一個字符串,我使用Length來返回數字字節。如果它不是字符串,我會調用另一種方法來使用開關來分配字節數。使用反射來獲取來自PropertyType的字節數
以下是我有:
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#真的很陌生,所以請隨意將我的代碼拆開。
感謝
你
一個快速點:string.length減不會給你使用,除非你已經設置編碼簡單的ASCII字節數。 –
好找@CodeCaster。看起來像是重複的。 –
@DavidArno - 感謝您指出大衛。我只是將我的源代碼更改爲'返回System.Text.Encoding.UTF8.GetByteCount(recordField.GetValue(dataRecord,null).ToString());'。 – UberNubIsTrue