通过 lambda 表达式检索泛型方法中的静态字段

发布于 2024-08-02 17:00:38 字数 523 浏览 2 评论 0原文

假设我得到了这个:

public class Foo{
    public string Bar;
}

然后我想创建一个“静态反射”来检索 Bar 的值,如下所示:

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

这应该可行。但如果 Foo 看起来像这样呢?

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

我可以在不传递 Foo 实例的情况下检索 Bar 的值吗?

用法应该如下所示:

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

Let's say i got this:

public class Foo{
    public string Bar;
}

Then i want to create a 'static reflection' to retrieve value of Bar like this:

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

That should work. But what if Foo looks like this?

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

Can i retrieve value of Bar without passing instance of Foo?

Usage should look like:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

翻了热茶 2024-08-09 17:00:38

您将传递一个忽略其参数的 lambda,并使用 default(T) 作为要使用的“实例”:

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

但我怀疑我有点错过了您的观点......

You'd pass in a lambda which ignored its parameter, and use default(T) for the "instance" to use:

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

I suspect I'm missing your point somewhat though...

过度放纵 2024-08-09 17:00:38
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";
    }

谢谢乔恩。

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";
    }

Thanks Jon.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文