Qual è lo scopo dell'utilizzo di String.Concat(Object)
anziché di String.Concat(String)
in C#? Perché non utilizzare semplicemente una chiamata implicita di Object.ToString()
invece di passare uno object
stesso che potrebbe causare il verificarsi della boxe?Scopo di String.Concat (Object) invece di String.Concat (String)
Int32 i = 5;
String s = "i = ";
// Boxing happens, ToString() is called inside
Console.WriteLine(s + i);
// Why compiler doesn't call ToString() implicitly?
Console.WriteLine(s + i.ToString());
Fornisce il seguente IL.
.method private hidebysig static void MyDemo() cil managed
{
// Code size 47 (0x2f)
.maxstack 2
.locals init ([0] int32 i, [1] string s)
IL_0000: nop
IL_0001: ldc.i4.5
IL_0002: stloc.0
IL_0003: ldstr "i = "
IL_0008: stloc.1
IL_0009: ldloc.1
IL_000a: ldloc.0
IL_000b: box [mscorlib]System.Int32
IL_0010: call string [mscorlib]System.String::Concat(object, object)
IL_0015: call void [mscorlib]System.Console::WriteLine(string)
IL_001a: nop
IL_001b: ldloc.1
IL_001c: ldloca.s i
IL_001e: call instance string [mscorlib]System.Int32::ToString()
IL_0023: call string [mscorlib]System.String::Concat(string, string)
IL_0028: call void [mscorlib]System.Console::WriteLine(string)
IL_002d: nop
IL_002e: ret
} // end of method Program::MyDemo
Buona domanda. Aggiungerei qui: perché non esiste un metodo 'stringa Concat (stringa s, valore T)', che verrà usato dall'operatore '+'. –
Dennis
@Dennis quale sarebbe l'uso di quello? –
@Dennis In che modo il compilatore concatena 'T value' con' string s'? Qualunque 'T' può essere concatenato? –