gpt4 book ai didi

c# - 使用 Lambda 表达式获取方法名称

转载 作者:可可西里 更新时间:2023-11-01 03:01:42 26 4
gpt4 key购买 nike

我正在尝试使用 lambda 表达式获取类型上的方法名称。我正在使用 Windows Identity Foundation,需要定义访问策略,其中类型名称和命名空间作为资源,方法名称作为操作。这是一个例子。

这是我将从中获取类型名称和方法名称的类型:

namespace My.OrderEntry {
public class Order {
public void AddItem(string itemNumber, int quantity) {}
}
}

这就是我想通过 DSL 定义访问策略的方式:

ForResource<Order>().Performing(o => o.AddItem).AllowUsersHaving(new Claim());

从该声明中,我希望将“My.OrderEntry.Order”作为资源并将“AddItem”作为操作。使用命名空间获取类型名称没有问题,但我不认为我可以像我正在尝试的那样将 lambda 用于方法。

public static IPermissionExp Performing<T>(
this IActionExp<T> exp,
Func<T, delegate???> action) {} //this is where I don't know what to define

这种事情真的可以做吗?有没有另一种方法可以在不使用魔法字符串的情况下做这种事情?

最佳答案

有两种方法:

1:您可以进行重载以获取各种 FuncAction委托(delegate)(例如 Expression<Func<T, Func<TParam1,TParam2, TReturn>> 。请注意,您的调用者需要在方法调用中或通过创建委托(delegate)来明确指定通用参数。这将像这样使用:

ForResource<Order>().Performing(o => new Action<string>(o.AddItem)).AllowUsersHaving(new Claim());

2:你可以选择 Expression<Action>包含一个方法调用,并解析出 MethodInfo从表达式树中调用。这将像这样使用:

ForResource<Order>().Performing(o => { o.AddItem(null); }).AllowUsersHaving(new Claim());

关于c# - 使用 Lambda 表达式获取方法名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2314329/

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