定义内联扩展方法

本文关键字:方法 扩展 定义 | 更新日期: 2023-09-27 18:32:04

请考虑以下代码:

Func<int,bool> hasFullAccess = (mask => mask % 2 == 1);
foreach (AccessControlEntry ace in (IEnumerable)usrAcl)
{
    if (hasFullAccess(ace.AccessMask)

我怎样才能告诉 Func 它是一个扩展方法,这样我就可以

    if (ace.AccessMask.hasFullAccess())

还是这是不可能的?

定义内联扩展方法

你不能。您需要为此声明一个单独的扩展方法:

public static class Extensions 
{
    public static bool HasFullAccess(this int mask)
    { 
        return mask % 2 == 1;
    }
}

否(C# 5.0 规范 §10.6.9 扩展方法);即使可以,这也需要更改名称解析规范(§7.6.5.2 扩展方法调用)。

相反,您可以尝试这样的事情:

Func<AccessControlEntry,bool> hasFullAccess = (ace => ace.AccessMask % 2 == 1);
// cast usrAcl as required get IEnumerable<AccessControlEntry>
foreach (var ace in usrAcl.Where(hasFullAccess))
{
}