質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

2回答

2946閲覧

C#で「_ =>」の意味

yrema

総合スコア286

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2019/05/04 12:39

編集2019/05/04 12:40

Xamarinの公式サンプルの1つに以下のような記述がありました。

「_ =>」の意味が分からないのですが、ラムダ式でもなさそうですし、なんというキーワードで検索すればヒットするでしょうか?
何かの省略であるなら、何が省略されていますか?

var otherAction = UIAlertAction.Create("Safe Choice", UIAlertActionStyle.Default, _ => Console.WriteLine("The 'Other' alert action sheet's other action occured."));

▼ソース(github)
AlertControllerViewController.cs

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ただのラムダ式です。
慣習として、引数を使わない場合は使わないことを明示する目的でアンダーバーを使います。

投稿2019/05/04 13:33

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yrema

2019/05/04 13:56

ありがとうございます。
guest

0

ベストアンサー

こんにちは。

ラムダ式のようです。
That is a convention used when you don't care about the parameter.
パラメータはDon't careということなので、実引数を書いても書かなくても良いという意味ではないかと思います。


【追記】
上記Stackoverflowの2番めの回答が有用でした。
_(アンダーライン)は単に アンダーライン1文字だけの仮引数のようです。
()=>との相違についても議論されてます。foreachなどの時、使わない場合でも仮引数が1つ必要になるので、そのような時は _ という仮引数名を用いるという習慣があるということのようです。

投稿2019/05/04 13:05

編集2019/05/04 15:05
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yrema

2019/05/04 13:56

ありがとうございます。
KSwordOfHaste

2019/05/04 14:14

引数の数は仮引数「_」の分まで含めて必要ですので「書いても書かなくてもよい」と表現してしまうと、 Action<T> f = _ => {}; f(); と書けるかのような誤解を招くと思います。実際は上のようにはかけずfには必ず実引数が一つ必要ですので。
Chironian

2019/05/04 14:21

KSwordOfHaste さん おお、Stackoverflowでdon't care(気にする必要なし)とあったのでそのように解釈してしまいました。 実は1つは必要なのですね。なるほどです。 フォローありがとうございました。
KSwordOfHaste

2019/05/04 14:30

おそらくこの文章は「あなた(が書いた関数)が実引数(の値を)気にしない場合の書き方です」というような意味合いだろうと思います。 That is a convention used when you don't care about the value of the parameter. とでも書いてあったならより明確だったかも知れませんね。
Chironian

2019/05/04 15:00

もしかして、_(アンダーライン)1文字だけの単なる仮引数なのですね? あああ、Stackoverflowの2番目3番目の回答にはっきりそう書かれてました。 単に _ だけを書いた時は、その仮引数は使っていないという習慣があるのですね。 更にその是非について2番目の回答で議論されてます。(foreach構文で使う場合、パラメータが1つ必須なので使わなくても書かなきゃいけない。)なるほど~。
KSwordOfHaste

2019/05/04 15:49

> 単なる仮引数 おっしゃるとおりです! Pythonなどでもそういう習慣(?)がある気がしますし、swiftだともっと強制力があり参照しない引数やループの制御変数名は'_'にしないとコンパイルエラーとなるようですね。Javaも最近(Java9)で識別子'_'が禁止になったようで調べてみるとswiftと同じ意味合いを持たせようとしているようです(JEP302)。C#ではそこまで強制力はないようですが他の言語でそういう使い方がポピュラーになってきたのでプログラマーたちがそれに倣った習慣にしているといったところではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問