定义内联扩展方法

时间:2014-11-25 11:15:02

标签: c# extension-methods

请考虑以下代码:

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

我如何告诉Func它是一个扩展方法,这样我就可以

    if (ace.AccessMask.hasFullAccess())

或者这不可能吗?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

否(C# 5.0 specification§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))
{
}