該当のコード
C# 10.0 でのラムダ式 - デリゲート - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
これですね。
C# 10.0で書けるようになった「ラムダ式の全部入り」みたいなもので、文脈的にC# 3.0から一気に飛ぶので唐突感はありますね。
読み進めていけばどこかに説明はありますが、実際に目にしたときに調べるくらいの気持ちで流してしまっていいと思います(目にすることがあるかもわからないし、あったとしてもだいぶ先だと思います)
とはいえ間違った認識のままというわけにもいかないので、リンク多めで説明します(詳細はリンク先を見てねということ^^;
varが型推論をしてくれる有能な型
いいえ。
便利型のようなものではありません。型ははっきり決まります。
Func<string?, int?>
と推論されますが、この場合は特に「自然型」というC# 10の最新機能です。
デリゲートの自然な型 - デリゲート - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
ラムダ式の自然型 - ラムダ式 - C# リファレンス | Microsoft Docs
fが変数の名前
はい。
Func<string?, int?>
型の変数f
です。
[A]は分からない
「ラムダ式にも属性を付けれるようになった」という例です(C# 10)
例のためのAAttribute
なので、それ以上の意味はありません([A]
としても何かが起きるわけではありません)
属性 - ローカル関数と匿名関数 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
属性 - ラムダ式 - C# リファレンス | Microsoft Docs
属性 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
属性 (C#) | Microsoft Docs
staticはクラスをインスタンス化したときにそのインスタンス先によって値が変わらない静的な意味を持つ修飾語
static
はいろんなところに付けられますが、この場合ラムダ式に付けて外部の変数をキャプチャしないという意味になります(C# 9.0)
静的匿名関数 - ローカル関数と匿名関数 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
ラムダ式における外部変数のキャプチャと変数のスコープ - ラムダ式 - C# リファレンス | Microsoft Docs
int?は値がnullでも構いませんよ系の整数を扱う型
まあそうですがこの場合の意図は、「ラムダ式の戻り値の型を明示できるようになった」という点です(C# 10)
戻り値の型の明示 - ローカル関数と匿名関数 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
宣言された戻り値の型 - ラムダ式 - C# リファレンス | Microsoft Docs
null許容値型(Nullable<T> 型) - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
null 許容値型 - C# リファレンス | Microsoft Docs
()の中身は引数や戻り値の型の条件
いいえ。
string?
型の引数s
に、属性A
が付いています。
戻り値は関係しないです(戻り値の型はint?
です)
=> はこいつが呼び出されたとき右のコードを実行しますよ的なもの
はい。
ラムダ演算子(lambda operator)だそうですが、それで皆に通じるかどうかはわかりません^^;
匿名関数 (ラムダ式) - ローカル関数と匿名関数 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
=> 演算子 - C# リファレンス | Microsoft Docs
s?.Lengthはsがnullの時にはsをnullじゃないときはs.Lengthを戻り値として返す値
はい。
意味は同じですが、「s
がnull
の時はnull
を返す」と言ったほうがわかりやすいでしょう。
null 条件演算子(null が来たら null を返す) - null の取り扱い - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
Null 条件演算子 ?. および ?[] - メンバー アクセス演算子と式 - C# リファレンス | Microsoft Docs