using System.Collections.Generic;
public class C
{
public static bool Foo(string x, string y)
{
var s = new SortedSet<string>();
s.Add(x);
return x.Length != y.Length && s.Contains(y);
}
}
Может ли метод Foo вернуть true?
(класс System.Collections.Generic.SortedSet<T> стандартный, из System.dll)
N>using System.Collections.Generic;
N>public class C
N>{
N> public static bool Foo(string x, string y)
N> {
N> var s = new SortedSet<string>();
N> s.Add(x);
N> return x.Length != y.Length && s.Contains(y);
N> }
N>}
N>Может ли метод Foo вернуть true? N>(класс System.Collections.Generic.SortedSet<T> стандартный, из System.dll)
Конечно: дефолтовый компаратор культурозависимый (используется текущая культура). String::Length возвращает "физическое" число символов, а культура может посчитать, что некоторая последовательность символов равна одному символу.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Muxa, Вы писали:
M>вот с этого места --*(ptr1 — 1) поподробнее пожалуйста. что произошло? и как это повлияло на длину твоей фигни (ac.str)?
Видим, в .NET в качестве строкового формата используется BSTR — в нем длина хранится перед указателем на начало строки.
N>Может ли метод Foo вернуть true? N>(класс System.Collections.Generic.SortedSet<T> стандартный, из System.dll)
Интересно, что EqualityComparer<string>.Default будет "правильным", всмысле сравнение пойдёт по правилу Ordinal, что приводит к интересному [парадоксальному!] результату:
str1.Equals(str2) != (str1.CompareTo(str2) == 0)
Какое поле для творчества тестировщикам!
Help will always be given at Hogwarts to those who ask for it.