2011-03-29 86 views
0

我正在尋找目標類型上的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方法......在這一點上,我將放棄這個想法。

回答

1

你的假設是正確的; CultureInfo僅在Invoke內用於轉換參數。

您需要將CultureInfo傳遞給方法本身,而不是Invoke