gpt4 book ai didi

c# - 在扩展方法 (C#) 中获取类型成员的简单语法

转载 作者:行者123 更新时间:2023-11-30 17:21:32 25 4
gpt4 key购买 nike

我正在尝试编写一个扩展方法,该方法使用 lambda 表达式为我提供表示给定类型成员的 MemberInfo。理想情况下,我希望能够写作

var info = MyType.GetMember(m => m.MyProperty);

或者,也可以接受

var info = typeof(MyType).GetMember(m => m.MyProperty);

甚至

var info = typeof(MyType).GetMember((MyType m) => m.MyProperty);

我有一个可用的通用方法签名,但需要我指定所有类型参数,而且我非常希望 C# 能够推断它们。据我所知,如果我只是找到指定扩展方法签名的正确方法,代码片段(至少是最后一个)中应该有足够的信息来推断一切——但根据编译器,没有't.

我读过 an old blog post on static extension methods但我最近没能在上面找到任何东西。如果那是真的,我就可以写了

public static MemberInfo GetMember<TType, TReturnType>(static TType, Expression<Func<TType, TReturnType>> member)

这将解决我的问题。但正如我所说,我似乎被实例扩展所困,在这种情况下

public static MemberInfo GetMember<TType, TReturnType>(this Type t, Expression<Func<TType, TReturnType>> member)

编译器推断类型成员还不够好。

最佳答案

这个怎么样:

public static MemberInfo GetMember<TType, TReturnType>
(this TType ignored,
Expression<Func<TType, TReturnType>> expression)

然后你会这样调用它:

default(MyType).GetMember(m => m.MyProperty)

这有点恶心,但是使用 default(MyType) 是获取类型 MyType 的表达式的一种简单而有效的方法,这就是您想要的类型推断.

关于c# - 在扩展方法 (C#) 中获取类型成员的简单语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com