semplicemente non si dovrebbe usare il nomeToString
per il metodo di estensione in quanto non sarà mai chiamato perché quel metodo già esiste e non si dovrebbe usare T
come il suo inutile lì.
Per esempio ho provato questo e ancora una volta restituito stessa cosa:
Console.WriteLine(lst.ToString<int>());
uscita:
shekhar, shekhar, shekhar, shekhar
quindi questa volta ho usato int
e ancora corse perché che T non ha alcun uso diverso da allora cambiando il metodo Prototype.
così semplicemente perché stai usando ToString
letterale Nome metodo, in quanto già esiste e si non può prevalere in un metodo di estensione, questo è il motivo era necessario utilizzare che T
per renderlo generico. Utilizzare un nome diverso come
public static string ToMyString(this IList<String> list)
In questo modo non si dovrebbe usare generico in quanto inutile lì e si potrebbe semplicemente chiamare come sempre.
Detto questo, il codice funziona per me. Ecco quello che ho provato (in 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);
}
}
e la produzione ammontava shekhar, shekhar, shekhar, shekhar
Dal momento che si è specificato che T
in ToString<T>
è necessario parlare di un tipo come string
o int
durante la chiamata il Metodo ToString.
+1. Un riferimento a MSDN: http://msdn.microsoft.com/en-us/library/bb383977.aspx (vedere la sezione degli esempi) – madhurtanwani