4

この正確な行を実行しようとしていますが、機能していません。その理由を知っている人はいますか?

Convert.ToBoolean("verdadero", new System.Globalization.CultureInfo("ES-MX"));

多くの言語がインストールされているプログラムによって生成された xml ファイルからこれを解析しているため、「EN-US」カルチャでは「true」、「ES-MX」では「verdadero」が使用されます。

4

1 に答える 1

3

面白い。逆コンパイラを介して Convert.ToBoolean を実行すると、次のように出力されます。

/// <summary>
/// Converts the specified string representation of a logical value to its Boolean equivalent, using the specified culture-specific formatting information.
/// </summary>
/// 
/// <returns>
/// true if <paramref name="value"/> equals <see cref="F:System.Boolean.TrueString"/>, or false if <paramref name="value"/> equals <see cref="F:System.Boolean.FalseString"/> or null.
/// </returns>
/// <param name="value">A string that contains the value of either <see cref="F:System.Boolean.TrueString"/> or <see cref="F:System.Boolean.FalseString"/>. </param><param name="provider">An object that supplies culture-specific formatting information. This parameter is ignored.</param><exception cref="T:System.FormatException"><paramref name="value"/> is not equal to <see cref="F:System.Boolean.TrueString"/> or <see cref="F:System.Boolean.FalseString"/>. </exception><filterpriority>1</filterpriority>
[__DynamicallyInvokable]
public static bool ToBoolean(string value, IFormatProvider provider)
{
  if (value == null)
    return false;
  else
    return bool.Parse(value);
}

これにより、IFormatProvider が完全に無視されているように見えます。

フレームワークのバグだと言いたくなりますが、経験から、その結論に達すると、通常何かを見落としていることがわかりました...

于 2013-07-11T20:00:58.927 に答える