C # 'da isimlerle bir değer demetine bir diğer ad tanımlayabilir misiniz?


92

C # 'da using anahtar sözcüğü ile takma adlar tanımlamanın mümkün olduğunu biliyorum .

Örneğin

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

Bununla birlikte, değer demetleri için yeni sözdizimini kullanarak birini tanımlamak mümkün müdür?

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

Bu sözdizimi işe yaramıyor gibi görünüyor. Olmalı mı?


1
Cevabı bilmiyorum, ancak "bir değişkeni tanımlamak için modül düzeyinde var kullanabilir miyim?"
Mario Vernari

o araçları derlemek yoksa olması gerektiği değil iş
Selman Genç

4
Cevabı bilmiyorum, ancak bu amaçlar için bir sınıf veya yapı oluşturmak daha iyi gibi görünüyor. Tuple'lar iyidir, ama lütfen aşırı kullanma.
Yeldar Kurmangaliyev

4
Interesing yorum @YeldarKurmangaliyev. Bunu kullanmanın nedeni, bir nesne için basit bir anahtar olarak kullanmak üzere tüm karşılaştırılabilir arayüzleri uygulamak zorunda kalmamaktır. Evet, tembel davranıyorum ama aynı zamanda dil özelliklerini de sonuna kadar kullanıyor.
Nick Randell

3
@NickRandell - insanlar (diğer geliştiriciler) için yazılım yazarken çoğu zaman kodunuzu okuyacaklardır. Açıklayıcı adlara sahip bir sınıfa ve özelliklere sahip olmak - daha dostça / etkili bir yaklaşımdır. Programcıların çoğu zaman kod okumak için harcadıkları (kendilerinin ve başkalarının) açıklayıcı isimleri ve veri yapıları zamandan tasarruf edecek
Fabio

Yanıtlar:



1

usingşu şekilde tanımlanır: ( MSDN ).using identifier = namespace-or-type-name;

(Guid venueId, string contentId, string answer) ne bir ad alanı ne de (tam nitelikli) bir tür adıdır.

Ama çoğunlukla tahmin ediyorum. Şimdiye kadar C # 7.0'ın varlığından bile haberdar değildim.


1
C # 1.1'in özelliği bu, C # 7.0 hakkında herhangi bir şeyi nasıl kanıtlıyor?
svick

1
İşe yarayacağı varsayımının nasıl geldiğini anlıyorum. Aynısını yapabilirdi ama bu doğru değil. Kullanmak, bir tür için bir takma ad değildir. Ancak bir tür adı veya ad alanı adı için. Derleyici ile ilgili özellikler, mevcut kodu bozmadan değiştirebileceğiniz en son şeydir. Bu yüzden muhtemelen onu genişletemezler. Ancak bunların hepsi muhtemelen David Arno'nun yukarıdaki yazısında çok daha ayrıntılı olarak açıklanmıştır. Daha iyi yanıt verdiği için oy verdim. Sorunuzu sorun dışı bir hale getirmek ...
Christopher

2
@svick Soru, bu belirli sözdizimine "izin verilip verilmeyeceğiydi". Bu, "hayır, C # geliştiricileri bu özel sözdizimine izin vermek zorunda değildir, çünkü C # 'ın ilk sürümlerinden beri benzer sözdizimlerine izin verilmedi" şeklinde doğru yanıt verir. Daha geniş soru, herhangi bir tür ifadesine izin verilip verilmeyeceğidir using.
IllidanS4 Monica'yı

1
@ IllidanS4 Bu cevabın söylediği buysa, o zaman gerçekten belirsizdir. Bağlantılı spesifikasyonun eski olduğundan veya yaptığınız argümanın herhangi bir parçasından bahsetmez.
svick

5
@Christopher Cevabın kötü olduğunu düşünürsem yorum yapacağım. Cevabın ne kadar çabuk yazıldığı veya hangi feragatnamelerin olduğu benim için önemli değil. Cevabınızın herhangi bir değer katmadığını düşünüyorsanız, onu silmek için ücret alın. Ayrıca, insanların bilgili cevaplar bulmak için SO'ya geldiğini düşünüyorum, bu yüzden belki de bilgisiz bir cevap yazmadan önce biraz düşünmelisiniz?
svick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.