El problema es que los diacrits especificados deben analizarse explícitamente, porque los puntos dobles no existen únicos y, por lo tanto, las comillas dobles se usan para este caso. Entonces, para lograr su problema, no tiene otra oportunidad que implementar cada caso necesario.
Aquí es un punto de partida para conseguir una pista ...
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;
}
}
}
El IEnumerable.Zip ya está implemented in .Net 4, pero para conseguir que en el punto 3.5 que necesitará este código (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);
}
}
Usted está buscando lo contrario de la cadena. Normalizar, me temo que no hay un método integrado para obtener lo que quiere ... –
Creo que está después de la normalización, es solo que sus signos diacríticos no son los que combinan no funciona –