[解決済み] C# 7 タプルとラムダ
質問
c# 7の新しいタプル構文では、タプルをパラメータとしてラムダを指定し、ラムダ内でパックされていない値を使用することは可能でしょうか?
例を挙げます。
var list = new List<(int,int)>();
ラムダでタプルを使用する通常の方法です。
list.Select(value => value.Item1*2 + value.Item2/2);
を回避するための新たな糖質を期待していたのですが
.Item1
.Item2
のように。
list.Select((x,y) => x*2 + y/2);
最後の行は、lambdaの2つのパラメータとして扱われるため、動作しません。実際にやり方があるのかどうかはわかりません。
EDITです。
ラムダ定義で二重括弧を試してみましたが、うまくいきませんでした。
((x,y)) => ...
と、試したのがバカだったのか、ここでは実際に二重括弧が機能しています。
list.Add((1,2));
また、私の質問は醜いデフォルト名を避けることとは全く関係ありません。
.Item .Item2
についてではなく、ラムダで実際にタプルを展開することについてです(そして、なぜそれが実装されていないか、または不可能なのかもしれません)。もしあなたがデフォルト名に対する解決策を求めてここに来たのであれば、以下を読んでください。
Sergey Berezovskiyの回答です。
.
EDIT 2:
より一般的な使用例として、メソッドに渡されたタプルを "deconstruct"することは可能ですか (またはなぜ可能でないのでしょうか)。このように。
void Foo((int,int)(x,y)) { x+y; }
この代わりに
void Foo((int x,int y) value) { value.x+value.y }
どのように解決するのですか?
あなたが観察したように、ために。
var list = new List<(int,int)>();
少なくとも、次のようなことができることを期待したい。
list.Select((x,y) => x*2 + y/2);
しかし、C# 7のコンパイラは(まだ)これをサポートしていません。また、以下のようなことを可能にするシュガーを望むのは妥当なことです。
void Foo(int x, int y) => ...
Foo(list[0]);
をコンパイラが変換して
Foo(list[0]);
を
Foo(list[0].Item1, list[0].Item2);
を自動生成します。
どちらも現状では不可能です。ただし、問題点として
を提案する。ラムダ引数リストにおけるタプルの分解
に存在します。
dotnet/csharplang
のレポがあり、言語チームがC#の将来のバージョンでこれらの機能を検討するよう要請しています。もしあなたもこのサポートを見たいのであれば、そのスレッドにあなたの声を追加してください。
関連
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] リストとタプルの違いは何ですか?
-
[解決済み] Pythonの「名前付きタプル」とは何ですか?
-
[解決済み] リスト/タプルを指定されたインデックスにある要素でソートするには?
-
[解決済み] タプルを引数に展開する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み] 2つのリストを結合する
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】Tupleクラスで "Item1", "Item2 "よりも優れた命名法