Reflektierender Parametername: Missbrauch von C#-Lambda-Ausdrücken oder Syntax-Brillanz? [geschlossen]C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Reflektierender Parametername: Missbrauch von C#-Lambda-Ausdrücken oder Syntax-Brillanz? [geschlossen]

Post by Anonymous »

Ich schaue mir die MvcContrib-Grid-Komponente an und bin fasziniert und gleichzeitig abgestoßen von einem syntaktischen Trick, der in der Grid-Syntax verwendet wird:

Code: Select all

.Attributes(style => "width:100%")
Die obige Syntax setzt das Stilattribut des generierten HTML auf width:100%. Wenn Sie nun aufpassen, ist „Stil“ nirgends angegeben. Er wird aus dem Namen des Parameters im Ausdruck abgeleitet! Ich musste mich damit befassen und fand heraus, wo die „Magie“ geschieht:

Code: Select all

Hash(params Func[] hash)
{
foreach (var func in hash)
{
Add(func.Method.GetParameters()[0].Name, func(null));
}
}
Der Code verwendet also tatsächlich den formalen, zur Kompilierzeit passenden Namen von Parametern, um das Wörterbuch der Attribut-Name-Wert-Paare zu erstellen. Das resultierende Syntaxkonstrukt ist zwar sehr ausdrucksstark, aber gleichzeitig auch 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 mit der Aufschrift „collection.ForEach(book => Fire.Burn(book)). Ich weiß, dass ich in meinen Code „collection.ForEach(log => Fire.Burn(log))“ schreiben kann, 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 das also eine gängige Praxis in der C# 3.5/4.0-Community und den Liebhabern von Lambda-Ausdrücken? Oder ist ein abtrünniger One-Trick-Außenseiter, über den ich mir keine Sorgen machen sollte?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post