Ich betrachte die MvcContrib Grid-Komponente und bin fasziniert und gleichzeitig abgestoßen von einem syntaktischen Trick, der in der Grid-Syntax verwendet wird :
.Attributes(style => "width:100%")
Die obige Syntax setzt das Stilattribut des generierten HTML auf width:100%
. Wenn Sie nun darauf achten, wird 'Stil' nirgends angegeben und aus dem Namen des Parameters im Ausdruck abgeleitet! Ich musste mich damit befassen und herausfinden, wo die 'Magie' passiert:
Hash(params Func<object, TValue>[] hash)
{
foreach (var func in hash)
{
Add(func.Method.GetParameters()[0].Name, func(null));
}
}
In der Tat verwendet der Code den formalen Namen der Parameter zur Kompilierungszeit, um das Wörterbuch der Attribut-Name-Wert-Paare zu erstellen. Das resultierende Syntaxkonstrukt ist zwar sehr ausdrucksstark, aber gleichzeitig sehr gefährlich. Die allgemeine Verwendung von Lambda-Ausdrücken ermöglicht das Ersetzen der verwendeten Namen ohne Nebenwirkungen. Ich sehe ein Beispiel in einem Buch, das besagt, dass collection.ForEach(book => Fire.Burn(book))
ich weiß , dass ich in meinen Code schreiben kann, collection.ForEach(log => Fire.Burn(log))
und es bedeutet dasselbe . Aber mit der MvcContrib Grid-Syntax hier finde ich plötzlich Code, der aktiv nach den Namen sucht und Entscheidungen trifft, die ich für meine Variablen wähle!
Ist dies also eine gängige Praxis bei der C # 3.5 / 4.0-Community und den Liebhabern von Lambda-Ausdrücken? Oder ist ein Schurke ein Trick-Außenseiter, über den ich mir keine Sorgen machen sollte?