0
我正在創建一個在內部庫中使用的類型轉換器,它應該能夠將任何類型的數據庫(long,DBNull,bool,string等等)返回的任何兼容的類型。將字符串轉換爲未知數字類型的正確方法是什麼?
這一切工作的項目鰭和花花公子,它們可以是鑄造:
try { return (T)value } catch(InvalidCaseException) { }
,或者可以解析:
看到Convert to a Nullable<T> from a string using Reflection
不過,我打磚牆時我想要這樣的行爲:
Assert.That(
2,
Is.EqualTo(
Converter<long>.Convert("2.1")
));
問題是,th當真正想要的結果是截斷小數時,e Pasre和TryParse函數將此作爲無效格式踢回去。
你認爲什麼是對像「2.1」的字符串解析使用反射的未知值類型的最佳方式?
編輯:目前我使用:
if (Nullable.GetUnderlyingType(t) != null)
{
t = Nullable.GetUnderlyingType(t);
}
MethodInfo parse = t.GetMethod("Parse", new Type[] { typeof(string) });
if (parse != null)
{
object parsed = parse.Invoke(null, new object[] { value.ToString() });
return (T)parsed;
}
else
{
throw new InvalidOperationException("The value you specified is not a valid " + typeof(T).ToString());
}
我認爲這對我很有用。基本上,如果我想要一個雙打,「解析」將會提取它。但是,如果我有一個像「1000000000000.1」這樣的數字,我希望能夠長期使用。我發現小數點是128位的,但它是否具有比長期更精確的範圍? – 2009-05-22 13:01:24