Метод расширения должен быть определен в неэквивалентном статическом классе

17

Ошибка при:

public partial class Form2 : Form

Вероятная причина:

public static IChromosome To<T>(this string text)
{
    return (IChromosome)Convert.ChangeType(text, typeof(T));
}

Попытка (без статического ключевого слова):

public IChromosome To<T>(this string text)
{
    return (IChromosome)Convert.ChangeType(text, typeof(T));
}
    
задан Sameer 02.05.2012 в 12:49
источник
  • Просто, когда я подумал, что это действительно хорошее сообщение об ошибке. –  Christian.K 02.05.2012 в 12:58

4 ответа

22

Если вы удалите «это» из своих параметров, он должен работать.

public static IChromosome To<T>(this string text)

должен быть:

public static IChromosome To<T>(string text)
    
ответ дан imPrettyAwesomeLikeThat 21.10.2013 в 23:34
источник
18

Класс, содержащий расширение, должен быть статическим. У вас есть:

public partial class Form2 : Form

, который не является статическим классом.

Вам нужно создать такой класс:

static class ExtensionHelpers
{
    public static IChromosome To<T>(this string text) 
    { 
        return (IChromosome)Convert.ChangeType(text, typeof(T)); 
    } 
}

Чтобы содержать методы расширения.

    
ответ дан DaveShaw 02.05.2012 в 12:50
источник
1

Поскольку ваш содержащий класс не является статическим, метод расширения должен находиться внутри статического класса. Этот класс также должен быть не вложен. Методы расширения (Руководство по программированию на C #)

    
ответ дан Habib 02.05.2012 в 12:52
источник
0

Моя проблема была вызвана тем, что я создал статический метод внутри частичного класса:

public partial class MainWindow : Window{

......

public static string TrimStart(this string target, string trimString)
{
    string result = target;

    while (result.StartsWith(trimString)){
    result = result.Substring(trimString.Length);
    }

    return result;
    }
} 

Когда я удалил метод, ошибка исчезла.

    
ответ дан Kobbi Gal 08.01.2018 в 18:33
источник