Simplemente se no debe usar el nombreToString
para el método de extensión, ya que nunca se llamará porque ese método ya existe y no se debe utilizar T
como su inútil allí.
Por ejemplo he intentado esto y de nuevo volvió misma cosa:
Console.WriteLine(lst.ToString<int>());
de salida:
shekhar, shekhar, shekhar, shekhar
así que esta vez he usado int
y todavía corrió porque que T no tiene ningún uso aparte cambiando el Prototipo del Método.
Así que simplemente ¿Por qué utiliza ToString
literal como nombre del método, puesto que ya existe y que no puede anularlo en un método de extensión, esta es la razón por la que tuvo que usar ese T
para que sea genérico. Utilizar un nombre diferente, como
public static string ToMyString(this IList<String> list)
De esa manera no tendría que utilizar genérica como inútil allí y simplemente se podría llamar como siempre.
Dicho esto, su código funciona para mí. esto es lo que he intentado (en LINQPad):
void Main()
{
List<string> lst = new List<string>();
lst.Add("shekhar");
lst.Add("shekhar");
lst.Add("shekhar");
lst.Add("shekhar");
lst.ToString<string>().Dump();
}
public static class ListHelper
{
public static string ToString<T>(this IList<String> list)
{
return string.Join(", ", list.ToArray());
}
public static string ToString<T>(this String[] array)
{
return string.Join(", ", array);
}
}
Y la salida estaba shekhar, shekhar, shekhar, shekhar
Puesto que usted ha especificado que T
en ToString<T>
tendrá que hablar de un tipo como string
o int
al llamar al Método ToString.
+1. Una referencia a MSDN: http://msdn.microsoft.com/en-us/library/bb383977.aspx (ver la sección de ejemplos) – madhurtanwani