Pernyataan Visual Studio C # runtuh

180

Saat mengedit blok kode yang sangat panjang (yang pastinya harus di refactored, tapi itu di luar cakupan pertanyaan ini), saya sering merindukan kemampuan untuk merobohkan blok pernyataan seperti seseorang dapat meruntuhkan blok fungsi. Dengan kata lain, alangkah baiknya jika ikon minus muncul pada garis besar kode untuk semua yang terlampir dalam kurung kurawal. Tampaknya muncul untuk fungsi, kelas, wilayah, ruang nama, penggunaan, tetapi tidak untuk blok bersyarat atau berulang. Akan luar biasa jika saya bisa menghancurkan hal-hal seperti seandainya, switch, foreaches, hal semacam itu!

Googling ke dalam sedikit itu, saya menemukan bahwa ternyata C ++ menguraikan dalam VS memungkinkan ini tetapi C # menguraikan dalam VS tidak. Saya tidak mengerti mengapa. Bahkan notepad ++ akan runtuh jika saya memilih format C #, jadi saya tidak mengerti mengapa Visual Studio tidak.

Adakah yang tahu tentang add-in VS2008 yang memungkinkan perilaku ini? Atau semacam pengaturan tersembunyi untuk itu?

Diedit untuk menambahkan: memasukkan wilayah tentu saja merupakan opsi dan itu sudah terjadi pada saya, tapi sejujurnya, saya tidak harus membungkus barang-barang di wilayah yang sudah dibungkus dengan kawat gigi ... jika saya akan mengedit kode yang ada, saya hanya akan refactor untuk memiliki pemisahan perhatian yang lebih baik pula. ("membungkus" dengan metode baru alih-alih wilayah;)

Nenek
sumber
6
BTW: Saya menemukan bahwa dua cara pintas ini membuat hidup saya sangat mudah: Toggle outline: Ctrl + M, M Perkecil Semua: Ctrl + M, O
Gaurav
2
Ctrl + M, L untuk mematikan / memperluas rekursif. Tentu saja, ini dapat meninggalkan Anda dengan satu baris. Di dalam baris itu, meskipun (Ctrl + M, M) membuat Anda dengan file yang diringkas dengan baik.
Patridge
2
Berikut plugin yang setara untuk VS 2012: stackoverflow.com/questions/18388280/…
Glimpse
terkait: Masalah Dengan Kode Lipat oleh Jeff Atwood, 2008
Nick Alexeev

Jawaban:

267

Dimulai dengan Visual Studio 2017, pernyataan runtuh adalah bawaan.

Ada beberapa ekstensi yang melakukan tugas ini untuk versi VS 2017 pra-2017, dimulai dengan versi VS 2010:

Ekstensi terakhir hanya mendukung VS 2015 dan VS 2017, tetapi yang paling kuat.
Ini mendukung pewarnaan sintaks di dalam blok yang diciutkan, lebih toleran terhadap kesalahan dan dioptimalkan.

Jika ekstensi tampaknya tidak menginstal setelah Anda menggunakan browser untuk mengunduhnya, coba gunakan manajer ekstensi Visual Studio bawaan.

Skyblade
sumber
Ini bagus, saya sudah lama mencari sesuatu seperti ini. Harus menjadi jawaban nyata! (Tetapi hanya jika Anda menggunakan VS2010 edisi non-ekspres, saya kira ...)
rikoe
Ekstensi ini bagus tetapi tidak berfungsi pada penangan (.ashx)
Jemsworld
3
Fakta bahwa kita bahkan memerlukan plugin ini untuk Visual Studio sangat membingungkan. Ini harus menjadi perilaku standar. Kebaikan.
Ryan Rodemoyer
@Odys, hapus instalan lalu instal ulang ekstensi untuk memperbaiki masalah Ctrl M + O.
Shahedur Rahman
21

Saya tidak mengetahui add-in, tetapi Anda menyebutkan kawasan dan saya tidak melihat ada salahnya melakukan sesuatu seperti ini ...

foreach (Item i in Items)
{
  #region something big happening here
  ...
  #endregion

  #region something big happening here too
  ...
  #endregion

  #region something big happening here also
  ...
  #endregion
}

EDIT: Menanggapi pertanyaan EDIT: Anda benar, menempel sekelompok daerah di mana-mana tidak ideal dan refactoring mungkin adalah cara untuk pergi. Tetapi tampaknya Anda mencari sesuatu yang ajaib yang akan "mengatur" kode untuk Anda, dan saya tidak berpikir itu ada.

Kon
sumber
IIRC, Anda tidak dapat menentukan daerah dalam suatu fungsi.
Joel Coehoorn
10
kodenya benar; Anda tidak terbatas pada tempat Anda dapat menentukan daerah seperti ini (selama Anda tidak berakhir di luar ruang lingkup permulaan)
John
3
Silakan lihat hasil edit dari pertanyaan aslinya; tindakan manual diperlukan pada bagian pengembang (bahkan menggunakan pintasan pembungkus wilayah satu-atau-dua-klik) tidak benar-benar menjawab pertanyaan / keinginan agar hal ini dilakukan secara otomatis
Grank
1
@ Joel Saya yakin Anda memikirkan VB.NET
Bryan Anderson
Semua plugin yang Anda temukan tertaut di utas ini lebih baik daripada menggunakan wilayah. Malam dan hari.
Glimpse
19

Anda dapat menutup blok teks tertentu dalam studio visual, tetapi Anda harus mematikan garis besar otomatis.

Klik kanan di jendela kode Anda dan pilih (Menguraikan | Berhenti Menguraikan)

Kemudian, pilih beberapa teks, klik kanan dan pilih (Menguraikan | Sembunyikan Pilihan)

Saat Anda menghidupkan kembali kerangka otomatis, "Wilayah" khusus Anda tidak akan lagi runtuh.

Matt Brunell
sumber
3
Cukup adil. Saya berharap untuk menemukan melalui pertanyaan ini cara untuk menambahkan blok ini ke garis besar otomatis, karena tidak masuk akal bagi mereka untuk tidak menjadi.
Nenek
1
Matt, Anda dapat melakukannya (dalam VS 2012) tanpa berhenti menguraikan secara otomatis. Cukup pilih teks, dan garis besar> sembunyikan pilihan
nawfal
3

Visual Studio 2008 mendukung kawasan di dalam fungsi selama Anda menyimpannya di tingkat hierarki kode yang sama

#region Won't work
for(int i = 0; i<Count; i++)
{
//do something
#endregion
}

for(int i=0; i<Count; i++)
{
#region Works fine
//do lots of stuff
#endregion
}
Chris Marisic
sumber
5
Ini bukan hal baru di tahun 2008. 2005 juga mendukungnya.
Kon
3

Izinkan saya mengatakan sesuatu yang berbeda: tekan (ctrl+m,ctrl+h)atau dalam edit> garis besar> sembunyikan pilihannya sangat berguna.

Tikar
sumber
1
@ Mahdi pertanyaannya adalah tentang alat yang akan menutup blok kode. Anda mengklik beberapa kombinasi dan ifs Anda, untuk / saat loop, dll semuanya diciutkan sehingga Anda dapat membaca kode Anda di tingkat tertinggi yang memungkinkan. Maka Anda akan masuk lebih dalam ke kode. Solusi Anda tidak dapat dijalankan karena Anda harus terlebih dahulu menciutkan semua wilayah dan Anda tidak melihat wilayah mana yang sebenarnya. Semoga beruntung di masa depan.
Roman
1
pertama-tama Anda dapat berkomentar sesuatu kemudian bersembunyi di bawah ini sehingga lebih mudah dan fleksibel
M pada
0

Saya akan menambahkan di sini bahwa dalam VS 2010 Microsoft telah menambahkan kemampuan adorner WPF menggunakan Managed Extensibility Framework (MEF), ini akan memungkinkan kami untuk memperluas editor kode sumber untuk mengaturnya dengan cara yang jauh lebih baik agar lebih mudah dibaca dan diakses.

Misalnya visualisasi Ringkasan Komentar yang diperagakan Scott Gu di PDC 2008 .

Jadi nantikan esok yang lebih baik untuk para pengembang :)

Vin
sumber
0

Coderush akan menguraikan semua blok kode untuk Anda. Tidak yakin apakah itu memungkinkan Anda untuk memperluas / menutup blok, tetapi menguraikan adalah hal terbaik berikutnya. Saya menggunakan resharper alih-alih coderush yang sejauh yang saya tahu tidak menyediakan blok runtuh :(

goku_da_master
sumber
0

Saya telah menemukan ini untuk Visual Studio 2013 dan menemukannya sangat membantu. Ini bekerja bahkan jika Anda meletakkan kurung kurawal di sekitar kode Anda dengan {.....}

Setelah berbagi, saya menemukan orang lain juga menyebutkan tautan ini. Pilihan saya untuk alat ini juga.

Alat C # Menguraikan untuk Visual Studio 2013

Pembangun
sumber
0

Di VS2017 Anda dapat menyorot bagian kode, klik kanan, Garis Besar> Sembunyikan pilihan. Ini akan menutup kode dan memberikan beralih ke bagian yang disorot.

LoflinA
sumber
-2

# region, # endregion adalah pilihan cerdas.


sumber
10
Aturan StyleCop SA1123: DoNotPlaceRegionsWithinElements: Pelanggaran aturan ini terjadi setiap kali suatu wilayah ditempatkan di dalam tubuh elemen kode. Di banyak editor, termasuk Visual Studio, wilayah akan muncul diciutkan secara default, menyembunyikan kode di dalam wilayah tersebut. Biasanya merupakan praktik yang buruk untuk menyembunyikan kode di dalam tubuh elemen, karena ini dapat menyebabkan keputusan yang buruk karena kode tersebut dipertahankan dari waktu ke waktu.
Sam Harwell