2014-11-25 76 views
0

考虑下面的代码:定义一个内联扩展方法

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

我怎么能告诉Func键,这是一个扩展方法,这样我可以做

if (ace.AccessMask.hasFullAccess()) 

,或者这是不可能的?

+3

他们必须是静态的静态类禁止这个事实。 – 2014-11-25 11:16:34

+1

你为什么要这样?你当前的代码没有错,对吧? – 2014-11-25 11:17:42

回答

3

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

public static class Extensions 
{ 
    public static bool HasFullAccess(this int mask) 
    { 
     return mask % 2 == 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)) 
{ 
}