Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/10/2010, 16:09
neowebmaster
 
Fecha de Ingreso: septiembre-2003
Ubicación: London
Mensajes: 162
Antigüedad: 20 años, 8 meses
Puntos: 0
Pregunta Confusión del compilador al sobrecargar char e Integer

Buenas,

Tengo un problema al realizar sobrecargas con el que ya me había topado en el pasado pero he decidido buscar ahora porqué sucede y de momento no he tenido éxito.

Haciendo pruebecillas y chorradas mías me ha dado por realizar un método extendido para la clase String en C# que es el siguiente:

Código:
        public static string Remove(this String str, Char letter)
        {
            if (str.IndexOf(letter) >= 0)
            {
                return str.Substring(0, str.IndexOf(letter) + 1);
            }
            else
            {
                return str;
            }
        }
Es una sobrecarga del método existente Remove que en vez de darle la posición le damos una letra y debe eliminar a partir de esa letra. El problema es que al existir una sobrecarga en la que se le pasa un integer y elimina a partir de esa posición recibo el error "startIndex must be less than length of string. Parameter name: startIndex".

Éste error se produce porque al debugar se confunde y no sabe si estoy llamando a la sobrecarga que pide un Integer o a la que te pide un Char. Deduzco que el problema viene porque el Char y el Integer son muy parecidos, pero claro no son lo mismo. He intentado incluso crear una variable del tipo Char a ver si así... pero nada. Aquí muestro cómo hago la llamada:

Código:
      string userName = "laura";
            char letter = 'u';
            userName = userName.Remove(letter);
Puedo hacer que el parámetro en vez de char sea string y entonces sí funciona, pero claro, eso se prestaría a confusiones. También puedo añadir un parámetro fantasma que no hace nada pero permite diferenciar la sobrecarga, pero podría ser confuso y es código basura. O incluso podría crear otro método y no hacer sobrecarga, pero eso no resuelve mi duda =P

¿Alguien sabe porqué sucede esto en .Net y cómo poner solución?


Gracias por adelantado.
__________________
Mi Blog