385

次のような場合に、「「メソッドグループ」から「文字列」に変換できません」などのエラーが頻繁に発生します。

var list = new List<string>();
// ... snip
list.Add(someObject.ToString);

もちろん、後の呼び出し括弧を忘れたので、最後の行にタイプミスがありましたToString。正しい形式は次のとおりです。

var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses

しかし、私はメソッドグループとは何か疑問に思いました。グーグルはあまり助けにもMSDNでもありません。

4

5 に答える 5

363

メソッドグループは、一連のメソッド(1つだけの場合もあります)の名前です。つまり、理論的には、ToStringメソッドに複数のオーバーロード(および任意の拡張メソッド)が含まれる場合があります。したがってToString()、それ自体が「メソッドグループ」です。ToString(string format)ToString

通常、オーバーロード解決を使用してメソッドグループを(型指定された)デリゲートに変換できますが、文字列などには変換できません。それは意味がありません。

かっこを追加したら、もう一度; 過負荷の解決が始まり、メソッド呼び出しを明確に識別しました。

于 2009-05-20T08:35:33.787 に答える
179

また、LINQを使用している場合は、どうやらのようなことができますmyList.Select(methodGroup)

したがって、たとえば、私は次のようになります。

private string DoSomethingToMyString(string input)
{
    // blah
}

このように使用する変数を明示的に指定する代わりに、次のようにします。

public List<string> GetStringStuff()
{
    return something.getStringsFromSomewhere.Select(str => DoSomethingToMyString(str));
}

varの名前は省略できます。

public List<string> GetStringStuff()
{
    return something.getStringsFromSomewhere.Select(DoSomethingToMyString);
}
于 2010-05-26T16:34:47.507 に答える
34

メソッドグループをデリゲートにキャストできます。

デリゲート署名は、グループから1つのメソッドを選択します。

この例ToString()では、文字列パラメーターを受け取るオーバーロードを選択します。

Func<string,string> fn = 123.ToString;
Console.WriteLine(fn("00000000"));

この例ToString()では、パラメーターをとらないオーバーロードを選択します。

Func<string> fn = 123.ToString;
Console.WriteLine(fn);
于 2013-02-28T00:21:49.617 に答える
22

MSDN検索の最初の結果は次のとおりです。

メソッドグループは、呼び出す1つのメソッド、または呼び出す特定のメソッドを選択するためのオーバーロードされたメソッドのセットを識別します。

私の理解では、基本的に、あなたがただ書くときsomeInteger.ToString、それは以下を参照するかもしれないからです:

Int32.ToString(IFormatProvider) 

またはそれは参照することができます:

Int32.ToString()

したがって、これはメソッドグループと呼ばれます。

于 2009-05-20T08:36:15.300 に答える
19

ToString関数には多くのオーバーロードがあります。メソッドグループは、その関数のすべての異なるオーバーロードで構成されるグループになります。

于 2009-05-20T08:36:39.603 に答える