任何人都可以解释这种行为吗?
var culture = new CultureInfo("da-DK");
Thread.CurrentThread.CurrentCulture = culture;
"daab".StartsWith("da"); //false
我知道可以通过指定StringComparison.InvariantCulture
来修复它。但我只是对这种行为感到困惑。
我也知道丹麦不区分大小写的比较中“aA”和“AA”不一样,见http://msdn.microsoft.com/en-us/library/xk2wykcz.aspx。这解释了这个
String.Compare("aA", "AA", new CultureInfo("da-DK"), CompareOptions.IgnoreCase) // -1 (not equal)
这是否与第一个代码段的行为有关?
答案 0 :(得分:6)
这里有一个说明问题的测试,daabogdåb(旧词和现代语言中的同一个词)意味着洗礼/洗礼。
public class can_handle_remnant_of_danish_language
{
[Fact]
public void daab_start_with_då()
{
var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
Assert.True("daab".StartsWith("då")); // Fails
}
[Fact]
public void daab_start_with_da()
{
var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
Assert.True("daab".StartsWith("da")); // Fails
}
[Fact]
public void daab_start_with_daa()
{
var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
Assert.True("daab".StartsWith("daa")); // Succeeds
}
[Fact]
public void dåb_start_with_daa()
{
var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
Assert.True("dåb".StartsWith("daa")); // Fails
}
[Fact]
public void dåb_start_with_da()
{
var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
Assert.True("dåb".StartsWith("da")); // Fails
}
[Fact]
public void dåb_start_with_då()
{
var culture = new CultureInfo("da-DK"); Thread.CurrentThread.CurrentCulture = culture;
Assert.True("dåb".StartsWith("då")); // Succeeds
}
}
所有上述测试都应该是我对语言的理解是成功的,而且我是丹麦语! 虽然我没有语法学位。 : - )
对我来说似乎是个错误。
答案 1 :(得分:5)
我认为在第二个例子中,当“AA”变为“Å”时,“aA”不会改变。只是为了使事情更加混乱,“Aa”只有在使用不区分大小写的比较时才被认为等于“AA”和“aa”。