2013-07-12 5 views
0

Я получаю сообщение об ошибке в C# при попытке доступа к статическому методу внутри другого класса.Имя «GimmePrimes» не существует в текущем контексте

Это класс пытается получить к нему доступ:

class Problem7 
{ 
    public void Solve() 
    { 
     GimmePrimes(new long[]{2, 3, 5, 7, 11, 13}); 
    } 
} 

И это статический класс, где GimmePrimes находится:

public static class Extensions 
{ 
    //....Other static methods that work// 
    public static IEnumerable<long> GimmePrimes(this long[] firstPrimes) 
     { 
      return firstPrimes.Unfold(priorPrimes => priorPrimes.Last().OddNumbersGreaterThan().SkipWhile(candidate => priorPrimes.TakeWhile(prime => prime * prime <= candidate).Any(prime => candidate.IsDivisibleBy(prime))).First()); 
     } 
} 

Оба класса находятся в том же пространстве имен.

+0

Вам нужно longarrayname.GimmePrimes – Sayse

ответ

9

Extensions должен быть статическим классом.

public static class Extensions 

Кроме того, как это метод расширения, вы вызываете его неправильно:

long[] array = new long[] {2, 3, 5, 7, 11, 13 }; 
IEnumerable<long> primes = array.GimmePrimes(); 

На связанной боковой ноте, когда у меня есть расширение классов метод, я создаю отдельно на каждый тип, который я распространяю, так что у меня нет огромного монолитного класса.

public static class IntExtensionMethods 
public static class StringExtensionMethods 
public static class IEnumerableExtensionMethods 

т.д.

+0

Это статический класс, жаль, что я не копировал, что более правильно. Отредактировал его, чтобы отразить правду. – Reapo

+0

Я заметил, что вам также необходимо ввести префикс 'this.' в расширенном объекте при вызове метода расширения. – orad

Смежные вопросы