Извлечение статического поля в универсальном методе с помощью лямбда-выражения - PullRequest
0 голосов
/ 21 августа 2009

Допустим, я получил это:

public class Foo{
    public string Bar;
}

Затем я хочу создать «статическое отражение», чтобы получить значение Bar следующим образом:

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

Это должно сработать. Но что, если Фу выглядит так?

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

Могу ли я получить значение Bar без передачи экземпляра Foo?

Использование должно выглядеть так:

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

Ответы [ 2 ]

2 голосов
/ 21 августа 2009

Вы передадите лямбду, которая игнорирует ее параметр, и будете использовать default(T) в качестве «экземпляра» для использования:

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

Я подозреваю, что я немного упускаю из виду ...

0 голосов
/ 21 августа 2009
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";
    }

Спасибо, Джон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...