Di C # dapatkah Anda mendefinisikan alias ke tupel nilai dengan nama?


92

Saya tahu itu mungkin untuk mendefinisikan alias di C # dengan menggunakan kata kunci.

misalnya

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

Namun, apakah mungkin untuk mendefinisikan satu menggunakan sintaks baru untuk tupel nilai?

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

Sintaks ini tampaknya tidak berfungsi. Haruskah itu?


1
Saya tidak tahu jawabannya, tapi sepertinya sama dengan "bolehkah saya menggunakan var di tingkat modul untuk mendefinisikan variabel?"
Mario Vernari

jika tidak dapat dikompilasi berarti tidak akan berfungsi
Selman Genç

4
Saya tidak tahu jawabannya, tapi sepertinya lebih baik membuat class atau struct untuk keperluan itu. Tuple memang bagus, tapi tolong jangan terlalu sering menggunakannya.
Yeldar Kurmangaliyev

4
Komentar menarik @YeldarKurmangaliyev. Alasan menggunakan ini adalah tidak harus mengimplementasikan semua antarmuka yang sebanding untuk digunakan sebagai kunci sederhana untuk sebuah objek. Ya, memang saya yang malas, tetapi juga menggunakan fitur bahasa secara maksimal.
Nick Randell

3
@NickRandell - sebagian besar waktu Anda menulis perangkat lunak untuk orang (pengembang lain) - mereka akan membaca kode Anda. Memiliki kelas dan properti dengan nama deskriptif - adalah pendekatan yang lebih ramah / efektif. Sebagian besar waktu yang dihabiskan programmer untuk membaca kode (milik sendiri dan orang lain) nama deskriptif dan struktur data akan menghemat waktu mereka
Fabio

Jawaban:



1

usingdidefinisikan sebagai: ( MSDN ).using identifier = namespace-or-type-name;

(Guid venueId, string contentId, string answer) bukanlah namespace atau nama jenis (yang sepenuhnya memenuhi syarat).

Tapi saya kebanyakan menebak-nebak. Bahkan tidak menyadari C # 7.0 ada sampai sekarang.


1
Itulah spesifikasi untuk C # 1.1, bagaimana hal itu membuktikan sesuatu tentang C # 7.0?
svick

1
Saya mengerti bagaimana asumsinya akan berhasil. Bisa saja membuat yang sama Tapi itu tidak benar. Menggunakan bukanlah alias untuk suatu tipe. Tapi untuk nama tipe atau nama namespace. Dan fitur terkait kompilator adalah salah satu hal terakhir yang dapat Anda ubah, tanpa merusak kode yang ada. Jadi mereka mungkin tidak bisa mengembangkannya. Tapi semua itu mungkin dijelaskan dengan lebih rinci dalam posting David Arno di atas. Yang saya upvoted karena menjawabnya lebih baik. Membuat pertanyaan Anda seperti bukan masalah ...
Christopher

2
@svick Pertanyaannya adalah apakah sintaks khusus ini "harus" diizinkan. Ini benar menjawab dengan "tidak, pengembang C # tidak diwajibkan untuk mengizinkan sintaks khusus ini, karena sintaks serupa tidak diperbolehkan sejak versi pertama C #". Pertanyaan yang lebih luas adalah apakah ekspresi jenis apa pun harus diizinkan masuk using.
IllidanS4 mendukung Monica

1
@ IllidanS4 Jika itu yang dikatakan jawaban ini, maka itu benar-benar tidak jelas. Itu tidak menyebutkan bahwa spesifikasi yang ditautkan sudah lama atau bagian dari argumen yang Anda buat.
svick

5
@Christopher Jika saya pikir sebuah jawaban buruk, saya akan mengomentarinya. Tidak masalah bagi saya seberapa cepat jawaban itu ditulis atau penyangkalan apa yang dimilikinya. Dan jika menurut Anda jawaban Anda tidak menambah nilai apa pun, rasakan biaya untuk menghapusnya. Juga, saya pikir orang datang ke SO untuk menemukan jawaban yang tepat, jadi mungkin Anda harus berpikir sedikit sebelum menulis jawaban yang kurang informasi?
svick
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.