Il crée objet de classe anonyme avec un champ appelé id
. Regardez msdn pour plus de détails. Une fois que vous créez l'objet , il ne peut pas être étendu.
Ce que cette classe ressemble quand il est ouvert avec .net réflecteur
[CompilerGenerated, DebuggerDisplay(@"\{ id = {id} }", Type="<Anonymous Type>")]
internal sealed class <>f__AnonymousType0<<id>j__TPar>
{
// Fields
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly <id>j__TPar <id>i__Field;
// Methods
[DebuggerHidden]
public <>f__AnonymousType0(<id>j__TPar id);
[DebuggerHidden]
public override bool Equals(object value);
[DebuggerHidden]
public override int GetHashCode();
[DebuggerHidden]
public override string ToString();
// Properties
public <id>j__TPar id { get; }
}
donc compilé sa classe régulière la différence fondamentale est qu'il ne peut pas être utilisé en dehors de la portée de la méthode.
la downvote peut expliquer pourquoi s'il vous plaît? – Oded
Je ne peux que deviner, mais peut-être parce que ce n'est pas vraiment correct. Il * a * un type explicite, c'est juste que le type est créé par le compilateur et n'a pas de nom (autre qu'internet pour le compilateur). – Guffa
@Guffa - peut-être ... J'ai modifié ma réponse pour être plus correct. – Oded