C#では、名前を持つ値タプルのエイリアスを定義できますか?


92

usingキーワードを使用してC#でエイリアスを定義できることは知っています。

例えば

using ResponseKey = System.ValueTuple<System.Guid, string, string>;

ただし、値タプルの新しい構文を使用して定義することは可能ですか?

using ResponseKey = (Guid venueId, string contentId, string answer);

この構文は機能していないようです。それをすべきですか?


1
答えはわかりませんが、「モジュールレベルでvarを使用して変数を定義できますか?」と非常によく似ています。
マリオヴェルナリ2017

それは手段をコンパイルしていない場合はそれが必要ない仕事
セルマンGENC

4
答えはわかりませんが、そのためにクラスや構造体を作成したほうがいいようです。タプルは良いですが、使いすぎないでください。
Yeldar Kurmangaliyev 2017

4
興味深いコメント@YeldarKurmangaliyev。これを使用する理由は、オブジェクトの単純なキーとして使用するために、同等のすべてのインターフェースを実装する必要がないためです。はい、私は怠け者ですが、言語機能も最大限に活用しています。
Nick Randell 2017

3
@ NickRandell-ほとんどの場合、人々(他の開発者)のためにソフトウェアを作成します-彼らはあなたのコードを読みます。わかりやすい名前のクラスとプロパティを持つことは、よりフレンドリーで効果的なアプローチです。プログラマーがコード(自分や他の人)の説明的な名前とデータ構造を読むことに費やす時間のほとんどは、時間を節約します
Fabio

回答:



1

usingは次のように定義されます: (MSDN)。using identifier = namespace-or-type-name;

(Guid venueId, string contentId, string answer) 名前空間でも(完全修飾)型名でもありません。

しかし、私はほとんど推測しています。今までC#7.0が存在することにさえ気づいていませんでした。


1
これがC#1.1の仕様ですが、C#7.0についてどのように証明されていますか?
svick 2017

1
私はそれがどのように機能するかという仮定がどのように機能するかを理解しています。同じものを作ることができたかもしれませんが、それは正しくありません。使用はタイプのエイリアスではありません。ただし、タイプ名または名前空間名の場合。また、コンパイラ関連の機能は、既存のコードを壊すことなく変更できる最後の機能です。したがって、彼らはおそらくそれを拡張することはできません。しかし、それはすべて、上記のDavidArnoの投稿でより詳細に説明されています。それがよりよく答えるので、私は賛成しました。...非問題のあなたの質問のようなものを作る
クリストファー・

2
@svick問題は、この特定の構文を「許可する必要がある」かどうかでした。これは、「いいえ、C#の最初のバージョン以降、同様の構文が許可されていなかったため、C#開発者はこの特定の構文を許可する義務はありません」と正しく答えます。より広い問題は、で任意の型式を許可する必要があるかどうかusingです。
IllidanS4は、2017

1
@ IllidanS4それがこの答えが言っていることなら、それは本当に不明確です。リンクされた仕様が古いことや、あなたが行った議論の一部については言及されていません。
svick 2017

5
@Christopher答えが悪いと思うなら、コメントします。答えがどれだけ早く書かれたか、またはそれがどのような免責事項を持っているかは私には関係ありません。そして、あなたの答えが何の価値ももたらさないと思うなら、それを削除するために料金を感じてください。また、人々は情報に基づいた答えを見つけるためにSOに来ると思うので、情報に基づいていない答えを書く前に少し考えるべきでしょうか?
svick 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.