web-dev-qa-db-ja.com

拡張メソッドは、非ジェネリックな静的クラスで定義する必要があります

エラー:

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));
}
19
Sameer

パラメータから「this」を削除すると、機能するはずです。

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

する必要があります:

public static IChromosome To<T>(string text)

拡張を含むクラスは静的である必要があります。あなたのものは:

public partial class Form2 : Form

これは静的クラスではありません。

次のようなクラスを作成する必要があります。

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

拡張メソッドを含めるため。

19
DaveShaw

私の問題は、部分クラス内に静的メソッドを作成したために発生しました。

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

メソッドを削除すると、エラーはなくなりました。

1
Kobbi Gal

包含クラスは静的ではないため、Extensionメソッドは静的クラス内にある必要があります。そのクラスも同様にネストされていない必要があります。 拡張メソッド(C#プログラミングガイド)

1
Habib