我正在尋找目標類型上的Parse方法的類型轉換器。它沒有發現問題,並且調用得很好。問題是當將特定的CultureInfo
傳遞給Invoke
方法時,它不起作用。使用反射時設置CultureInfo調用
演示代碼:
const BindingFlags flags = BindingFlags.Public | BindingFlags.Static;
var parser = typeof(decimal).GetMethod("Parse", flags, null, new[] { typeof(string) }, null);
var result1 = parser.Invoke(null, flags, null, new[] { "123,456" }, CultureInfo.GetCultureInfo("sv-SE"));
var result2 = parser.Invoke(null, flags, null, new[] { "123,456" }, CultureInfo.GetCultureInfo("en-US"));
Console.WriteLine(result1);
Console.WriteLine(result2);
結果(使用瑞典語語言環境):
123,456
123,456
那麼是什麼情況是,Parse
方法工作,但CultureInfo
我傳遞給Invoke
被忽略。瑞典語的調用應該認識到逗號是一個十進制數,美國人的調用應該認識到逗號是千位分隔符。
Invoke
假設要做的CultureInfo
參數是什麼? MSDN says
CultureInfo的一個實例,用於管理類型的強制。如果它爲null,則使用當前線程的CultureInfo。 (這是必要的轉換,表示1000到雙精度值,例如字符串,因爲1000由不同的文化表示不同。)
這是否有將參數傳遞給該方法您何時做內部轉換在調用期間調用CurrentCulture
而不是調用?在我按這裏之前,我只是想弄明白這一點。我可能需要找到包含CultureInfo參數的Parse方法......在這一點上,我將放棄這個想法。