2009-08-21 8 views
0

Lassen Sie uns sagen, dass ich diese bekam:statisches Feld von Lambda-Ausdruck in der generischen Methode Abrufen von

public class Foo{ 
    public string Bar; 
} 

Dann möchte ich eine ‚statische Reflexion‘ schaffen Wert von Bar wie folgt abzurufen:

public void Buzz<T>(T instance, Func<T, string> getProperty){ 
    var property = getProperty(instance);   
} 

Das sollte funktionieren. Aber was ist, wenn Foo so aussieht?

public class Foo{ 
    public static string Bar = "Fizz"; 
} 

Kann ich abrufen Wert von Bar ohne Instanz von Foo vorbei?

Verbrauch sollte wie folgt aussehen:

var barValue = Buzz<Foo>(foo=>foo.Bar); 

Antwort

2

Sie in einem Lambda passieren würde, die ihre Parameter ignoriert, und verwenden Sie default(T) für die "Instanz" zu verwenden:

var barValue = Buzz<Foo>(x => Foo.Bar); 

Ich vermute, ich Ich vermisse deinen Punkt etwas obwohl ...

+0

Dies ist, wo Idee kam von - http://www.delphicsage.com/home/blog.aspx/d=131/title=Using_Net_3x_Lambda_Expressions_to_Write_More_Concise_Code –

+0

Es tut uns so vage - Problem ist, dass ich fühle mich ziemlich unangenehm dieses Thema (versucht, das zu ändern). Aber du hast den Nagel gehämmert ... schon wieder ... –

0
class Program 
    { 
     static void Main() 
     { 
      Buzz<Foo>(x => Foo.Bar); 
     } 

     public static void Buzz<T>(Func<T, string> getPropertyValue) 
     { 
      var value = getPropertyValue(default(T)); 
      //value=="fizz" which is what i needed 
     } 
    } 

    public class Foo 
    { 
     public static string Bar = "fizz"; 
    } 

Dank Jon.

Verwandte Themen