Метод расширения должен быть определен в неуниверсальном статическом классе - PullRequest
4 голосов
/ 11 февраля 2012

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

public partial class Missing : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    List<int> daysOfMonth =
       new List<int>() { 6, 2, 4, 1, 9, 7, 3, 10, 15, 19, 11, 18, 13, 22, 24, 20, 27, 31, 25, 28 };
    Response.Write("List of days:");
    foreach (var num in daysOfMonth)
    {
        Response.Write(num);
    }
    Response.Write("\n\nMissing days are: ");
    // Calling the Extension Method in the List of type int 
    foreach (var number in daysOfMonth.FindMissing()){Response.Write(number);}
}
public static IEnumerable<int> FindMissing(this List<int> list)
{
    // Sorting the list
    list.Sort();
    // First number of the list
    var firstNumber = list.First();
    // Last number of the list
    var lastNumber = list.Last();
    // Range that contains all numbers in the interval
    // [ firstNumber, lastNumber ]
    var range = Enumerable.Range(firstNumber, lastNumber - firstNumber);
    // Getting the set difference
    var missingNumbers = range.Except(list);
    return missingNumbers;
}

}

Я получаю сообщение об ошибке следующим образом Extension method must be defined in a non-generic static class Может ли кто-нибудь помочь мне

Ответы [ 2 ]

19 голосов
/ 11 февраля 2012

Как говорится в сообщении об ошибке, методы расширения могут быть объявлены только для неуниверсального статического класса.Вы пытаетесь объявить метод FindMissing в классе Missing, который не является неуниверсальным статическим классом.

У вас есть два варианта:

  1. Создать методнормальный метод, в этом случае он может оставаться в Missing классе
  2. Объявить другой класс, возможно MissingExtensions, чтобы содержать метод

Это то, что второй вариантбудет выглядеть так:

public static class MissingExtensions
{
    public static IEnumerable<int> FindMissing(this List<int> list)
    {
        // ...
    }
}
2 голосов
/ 11 февраля 2012

Это то, что вы должны написать согласно Bryan watts ответу

public partial class Missing : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
     // Your code
}
}

public static class MissingExtensions
{
    public static IEnumerable<int> FindMissing(this List<int> list)
    {
        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...