web-dev-qa-db-fra.com

La méthode d'extension doit être définie dans une classe statique non générique

Erreur à:

public partial class Form2 : Form

Cause probable:

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

Tentative (sans mot clé statique):

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

Si vous supprimez "this" de vos paramètres, cela devrait fonctionner.

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

devrait être:

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

La classe contenant l'extension doit être statique. Vous êtes en:

public partial class Form2 : Form

qui n'est pas une classe statique.

Vous devez créer une classe comme ceci:

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

Pour contenir les méthodes d'extension.

19
DaveShaw

Mon problème est dû au fait que j'ai créé une méthode statique à l'intérieur de la classe partielle:

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;
    }
} 

Lorsque j'ai supprimé la méthode, l'erreur a disparu.

1
Kobbi Gal

Étant donné que votre classe conteneur n'est pas statique, la méthode d'extension doit se trouver dans une classe statique. Cette classe doit également être non imbriquée. Méthodes d'extension (Guide de programmation C #)

1
Habib