Vấn đề là, các dấu phụ được chỉ định phải được phân tích cú pháp rõ ràng, làm cho các điểm hai không tồn tại duy nhất và do đó các dấu ngoặc kép được sử dụng cho trường hợp này. Vì vậy, để hoàn thành vấn đề của bạn, bạn không có bất kỳ cơ hội nào khác để thực hiện từng trường hợp cần thiết.
Đây là một điểm khởi đầu để có được một đầu mối ...
public SomeFunction()
{
string asciiChars = "Dutch has funny chars: a,e,u";
string diacrits = " ' \" \"";
var combinedChars = asciiChars.Zip(diacrits, (ascii, diacrit) =>
{
return CombineChars(ascii, diacrit);
});
var Result = new String(combinedChars.ToArray());
}
private char CombineChars(char ascii, char diacrit)
{
switch (diacrit)
{
case '"':
return AddDoublePoints(ascii);
case '\'':
return AddAccent(ascii);
default:
return ascii;
}
}
private char AddDoublePoints(char ascii)
{
switch (ascii)
{
case 'a':
return 'ä';
case 'o':
return 'ö';
case 'u':
return 'ü';
default:
return ascii;
}
}
private char AddAccent(char ascii)
{
switch (ascii)
{
case 'a':
return 'á';
case 'o':
return 'ó';
default:
return ascii;
}
}
}
Các IEnumerable.Zip đã là implemented in .Net 4, nhưng để có được nó trong 3,5 bạn sẽ cần mã này (taken from Eric Lippert):
public static class IEnumerableExtension
{
public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>
(this IEnumerable<TFirst> first,
IEnumerable<TSecond> second,
Func<TFirst, TSecond, TResult> resultSelector)
{
if (first == null) throw new ArgumentNullException("first");
if (second == null) throw new ArgumentNullException("second");
if (resultSelector == null) throw new ArgumentNullException("resultSelector");
return ZipIterator(first, second, resultSelector);
}
private static IEnumerable<TResult> ZipIterator<TFirst, TSecond, TResult>
(IEnumerable<TFirst> first,
IEnumerable<TSecond> second,
Func<TFirst, TSecond, TResult> resultSelector)
{
using (IEnumerator<TFirst> e1 = first.GetEnumerator())
using (IEnumerator<TSecond> e2 = second.GetEnumerator())
while (e1.MoveNext() && e2.MoveNext())
yield return resultSelector(e1.Current, e2.Current);
}
}
Bạn đang tìm kiếm đối diện của string.Normalize, tôi e rằng không có phương pháp nội trang nào để có được thứ bạn muốn ... –
Tôi nghĩ rằng sau khi bình thường hóa, nó chỉ là dấu phụ của anh ấy không phải là ký tự kết hợp nó không hoạt động. –