2

(ラムダ関数は私が探しているものである場合とそうでない場合がありますが、よくわかりません)

基本的に私が達成しようとしているのはこれです:

int areaOfRectangle = (int x, int y) => {return x * y;};

ただし、エラーが発生します:「デリゲート型ではないため、ラムダ式を型'int'に変換できません」

より詳細な問題(実際には質問とは関係ありませんが、誰かが尋ねるでしょう)は次のとおりです。

オーバーライドされたOnLayoutから分岐するいくつかの関数と、それらのそれぞれが依存するいくつかの関数があります。読みやすくし、後で拡張するための先例を設定するために、OnLayoutから分岐する関数をすべて同じように見せたいと思います。そのためには、それらを区分化し、可能な限り名前を再利用する必要があります。

protected override void OnLayout(LayoutEventArgs levent)
    switch (LayoutShape)
    {
        case (square):
            doSquareLayout();
            break;
        case (round):
            doRoundLayout();
            break;
        etc..
        etc..
    }
void doSquareLayout()
{
    Region layerShape = (int Layer) =>
    {
        //do some calculation
        return new Region(Math.Ceiling(Math.Sqrt(ItemCount)));
    }
    int gradientAngle = (int itemIndex) =>
    {
        //do some calculation
        return ret;
    }
    //Common-ish layout code that uses layerShape and gradientAngle goes here
}
void doRoundLayout()
{
    Region layerShape = (int Layer) =>
    {
        //Do some calculation
        GraphicsPath shape = new GraphicsPath();
        shape.AddEllipse(0, 0, Width, Height);
        return new Region(shape);
    }
    int gradientAngle = (int itemIndex) =>
    {
        //do some calculation
        return ret;
    }
    //Common-ish layout code that uses layerShape and gradientAngle goes here
}

が今見つけたすべての例は、デリゲートを宣言する必要があると言っていますが、ワンライナーラムダ宣言を見たことがあります...

4

4 に答える 4

6

Func<int, int, int> areaOfRectangle = (int x, int y) => { return x * y;};代わりに試してください。

Func代理人として機能します

ラムダ式の使用法の詳細については、こちらをご覧ください

この回答も関連しており、いくつかの良い情報があります

読みやすさのためにそれを行っていて、同じ関数layerShapeとを再現しようとgradientAngleしている場合は、それらの関数が実際に同じであることを示すために、それらの関数の明示的なデリゲートが必要になる場合があります。ちょっとした考え。

于 2013-02-15T19:43:31.920 に答える
2

このようにしてみてください。

Func<int, int, int> areaOfRectangle = (int x, int y) => { return x * y; };

MSDNFunc<T1, T2, TResult>から確認してください;

2つのパラメーターを持つメソッドをカプセル化し、TResultパラメーターで指定されたタイプの値を返します。

于 2013-02-15T19:44:19.257 に答える
1

変数タイプは、パラメーターと戻りタイプに基づいています。

Func<int,int,int> areaOfRectangle = (int x, int y) => {return x * y;};
于 2013-02-15T19:44:01.950 に答える
1

あなたは近いです:

Func<int, int, int> areaOfRectangle = (int x, int y) => {return x * y;};

したがって、特定のケースでは、宣言は次のようになります。

Func<int, Region> layerShape = (int Layer) =>
...
于 2013-02-15T19:44:25.440 に答える