(ラムダ関数は私が探しているものである場合とそうでない場合がありますが、よくわかりません)
基本的に私が達成しようとしているのはこれです:
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
}
私が今見つけたすべての例は、デリゲートを宣言する必要があると言っていますが、ワンライナーラムダ宣言を見たことがあります...