web-dev-qa-db-ja.com

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

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

例えば.

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

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

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

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

69
Nick Randell

これは要求され、GithubのRoslynリポジトリに記録されています 。ただし、そこで混合受信を受け取り、 提案されたレコードタイプ は、この要件を十分にカバーします。

この問題はRoslynリポジトリでクローズされました ただし、現在はC#言語リポジトリで追跡されています

54
David Arno

usingは次のように定義されます:using identifier = namespace-or-type-name;[〜#〜] msdn [〜#〜] )。

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

しかし、私はほとんど推測しています。今までC#7.0が存在することすら知らなかった。

3
Christopher

System.Tupleを拡張できます。次のようなものです。

    public sealed class ResponseKey : System.Tuple<System.Guid, string, string>
    {
        public ResponseKey(System.Guid item1, string item2, string item3) : base(item1, item2, item3)
        {
        }

        public System.Guid VenueId => Item1;
        public string ContentId => Item2;
        public string Answer => Item3;
    }
0
eddiewould