2015-07-20 10 views
7

Poniższy kod kompiluje:C#: Przedłużacze Metody niedostępne z aliasem stosując dyrektywę

using Microsoft.SharePoint.Client 

class Dummy() 
{ 
    void DummyFunction(ClientContext ctx, ListCollection lists) 
    { 
     Context.Load(lists, lc => lc.Include(l => l.DefaultViewUrl); 
    } 
} 

Jednak po przełączeniu do aliasem użyciu, nie ma problemu z funkcją obejmują, co stanowi metodę rozszerzenia:

using SP = Microsoft.SharePoint.Client 

class DummyAliased() 
{ 
    void DummyFunction(SP.ClientContext ctx, SP.ListCollection lists) 
    { 
     /* Does not compile: */ 
     Context.Load(lists, lc => lc.Include(l => l.DefaultViewUrl); 
     /* Compiles (not using function as generic) */ 
     Context.Load(lists, lc => SP.ClientObjectQueryableExtension.Include(lc, l => l.DefaultViewUrl)); 
    } 
} 

Funkcji Include można nadal używać, ale nie jako metody rozszerzenia. Czy istnieje sposób użycia go jako metody rozszerzającej bez un-aliasingu dyrektywy using?

+1

Podobne pytanie http://stackoverflow.com/questions/3337453 pyta _dlaczego to nie działa_. Proszę o lepsze rozwiązanie, niż to, co pokazałem. – Hutch

Odpowiedz

10

Dopiero C# 6 ... ale w C# 6 można użyć:

using static Microsoft.SharePoint.Client.ClientObjectQueryableExtension; 

using SP = Microsoft.SharePoint.Client; 

Pierwszym z nich będzie ciągnąć w zaledwie statycznych członków ClientObjectQueryableExtension dostępnych, bez niczego zrobić z resztą przestrzeni nazw.

Powiązane problemy