ใน C # คุณสามารถกำหนดนามแฝงให้กับ tuple ด้วยชื่อได้หรือไม่?


92

ฉันรู้ว่าเป็นไปได้ที่จะกำหนดนามแฝงใน C # ด้วยคำหลักโดยใช้

เช่น

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

อย่างไรก็ตามเป็นไปได้หรือไม่ที่จะกำหนดโดยใช้ไวยากรณ์ใหม่สำหรับสิ่งที่เป็นค่า

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

ดูเหมือนว่าไวยากรณ์นี้จะไม่ทำงาน ควรเป็น?


1
ฉันไม่รู้คำตอบ แต่ดูเหมือนว่า "ฉันจะใช้ var ที่ระดับโมดูลเพื่อกำหนดตัวแปรได้หรือไม่"
Mario Vernari

ถ้าคอมไพล์ไม่ได้หมายความว่ามันไม่ควรทำงาน
Selman Genç

4
ฉันไม่รู้คำตอบ แต่ดูเหมือนว่าการสร้างคลาสหรือโครงสร้างเพื่อจุดประสงค์นั้นจะดีกว่า สิ่งที่ดี แต่โปรดอย่าใช้มากเกินไป
Yeldar Kurmangaliyev

4
โต้ตอบความคิดเห็น @YeldarKurmangaliyev เหตุผลในการใช้สิ่งนี้คือการไม่ต้องใช้อินเทอร์เฟซที่เทียบเคียงได้ทั้งหมดเพื่อใช้เป็นคีย์ง่ายๆสำหรับอ็อบเจ็กต์ ใช่ฉันเป็นคนขี้เกียจ แต่ก็ใช้คุณสมบัติของภาษาอย่างเต็มที่
Nick Randell

3
@NickRandell - เวลาส่วนใหญ่ที่คุณเขียนซอฟต์แวร์ให้กับผู้คน (ผู้พัฒนารายอื่น) พวกเขาจะอ่านโค้ดของคุณ การมีคลาสและคุณสมบัติพร้อมชื่อที่สื่อความหมาย - เป็นแนวทางที่เป็นมิตร / มีประสิทธิภาพมากกว่า เวลาส่วนใหญ่โปรแกรมเมอร์ใช้ในการอ่านโค้ด (ของตัวเองและคนอื่น ๆ ) ชื่อที่สื่อความหมายและโครงสร้างข้อมูลจะช่วยประหยัดเวลาได้
Fabio

คำตอบ:


67

นี้ได้รับการร้องขอและบันทึกไว้ใน repo โรสลินบน Github อย่างไรก็ตามได้รับการต้อนรับแบบผสมที่นั่นและประเภทบันทึกที่เสนอจะครอบคลุมข้อกำหนดนี้มากกว่า

ปัญหาที่ถูกปิดใน repo โรสลินแต่ขณะนี้ถูกติดตามใน repo


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

1
ฉันเข้าใจว่าการตั้งครรภ์นั้นเกิดขึ้นได้อย่างไร อาจจะทำแบบเดียวกัน แต่ไม่ถูกต้อง การใช้ไม่ใช่นามแฝงสำหรับประเภท แต่สำหรับชื่อประเภทหรือชื่อเนมสเปซ และคุณสมบัติที่เกี่ยวข้องกับคอมไพเลอร์เป็นสิ่งสุดท้ายที่คุณสามารถเปลี่ยนแปลงได้โดยไม่ทำลายโค้ดที่มีอยู่ ดังนั้นพวกเขาจึงไม่สามารถขยายได้ แต่ทั้งหมดที่อธิบายได้อย่างมีรายละเอียดดีกว่ามากในโพสต์ของ David Arno ด้านบน ฉันโหวตให้คะแนนเพราะมันตอบว่าดีกว่า ทำให้คำถามของคุณไม่ใช่ประเด็น ...
Christopher

2
@svick คำถามคือว่าไวยากรณ์เฉพาะนี้ "ควรได้รับ" หรือไม่ คำตอบนี้ถูกต้องโดย "ไม่นักพัฒนา C # ไม่จำเป็นต้องอนุญาตให้ใช้ไวยากรณ์เฉพาะนี้เนื่องจากไม่อนุญาตให้ใช้ไวยากรณ์ที่คล้ายกันตั้งแต่เวอร์ชันแรกของ C #" คำถามที่กว้างขึ้นคือว่าการแสดงออกของชนิดใด ๆ usingควรจะได้รับอนุญาตใน
IllidanS4 รองรับ Monica

1
@ IllidanS4 ถ้านั่นคือสิ่งที่คำตอบนี้บอกก็ไม่ชัดเจนจริงๆ ไม่ได้ระบุว่าข้อมูลจำเพาะที่เชื่อมโยงนั้นเก่าหรือเป็นส่วนหนึ่งส่วนใดของข้อโต้แย้งที่คุณสร้างขึ้น
svick

5
@Christopher ถ้าฉันคิดว่าคำตอบไม่ดีฉันจะแสดงความคิดเห็น ไม่สำคัญสำหรับฉันว่าคำตอบถูกเขียนเร็วแค่ไหนหรือมีข้อจำกัดความรับผิดชอบอย่างไร และถ้าคุณคิดว่าคำตอบของคุณไม่ได้เพิ่มมูลค่าใด ๆ คุณก็ต้องเสียค่าธรรมเนียมในการลบคำตอบนั้น นอกจากนี้ฉันคิดว่าผู้คนมาที่ SO เพื่อค้นหาคำตอบที่มีข้อมูลดังนั้นคุณควรคิดสักนิดก่อนที่จะเขียนคำตอบที่ไม่รู้?
svick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.