Saya mencoba untuk menulis pernyataan beralih yang akan mengetik istilah pencarian di bidang pencarian tergantung pada kotak teks pencarian yang ada. Saya memiliki kode berikut. Tapi saya mendapatkan kesalahan "Kontrol tidak dapat gagal dari label satu kasus".
switch (searchType)
{
case "SearchBooks":
Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
Selenium.Click("//*[@id='SearchBooks_SearchBtn']");
case "SearchAuthors":
Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
}
Kontrol tidak dapat dialirkan dari satu label kasus (
case "SearchBooks":
) ke label lainnyaKontrol tidak dapat dialirkan dari satu label kasus (
case "SearchAuthors":
) ke label lainnya
sumber
break
karena perlu jatuh pada beberapa keadaan ?!goto case "some String"
.Anda perlu
break;
,throw
,goto
, ataureturn
dari masing-masing label kasus Anda. Dalam satu lingkaran Anda juga bisacontinue
.Satu-satunya saat ini tidak benar adalah ketika label kasus ditumpuk seperti ini:
sumber
continue
mungkin jugagoto case "SearchBooks";
sehingga Anda memiliki kemampuan untuk melakukan apa yang perlu Anda lakukan tanpa kehilangan banyak ekspresif atau menambahkan bug yang tidak terduga.Anda dapat melakukan lebih dari sekadar jatuh dalam C #, tetapi Anda harus menggunakan pernyataan goto "menakutkan". Sebagai contoh:
sumber
Anda perlu menambahkan pernyataan istirahat:
Ini mengasumsikan bahwa Anda ingin baik pegangan
SearchBooks
kasus atau yangSearchAuthors
- seperti yang Anda telah menulis dalam, dalam sebuah pernyataan C-gaya saklar tradisional aliran kontrol akan "jatuh melalui" dari satu kasus pernyataan makna berikutnya yang semua 4 baris kode dieksekusi dalam kasus di manasearchType == "SearchBooks"
.Kesalahan kompiler yang Anda lihat diperkenalkan (setidaknya sebagian) untuk memperingatkan programmer tentang kesalahan potensial ini.
Sebagai alternatif, Anda bisa melempar kesalahan atau kembali dari suatu metode.
sumber
Di akhir setiap sakelar ganti tambahkan pernyataan break untuk menyelesaikan masalah ini seperti ini-
sumber
Karena itu tidak disebutkan dalam jawaban lain, saya ingin menambahkan bahwa jika Anda ingin kasus SearchAuthors dieksekusi tepat setelah kasus pertama selesai, sama seperti kasusnya ketika menghilangkan "break" dalam beberapa bahasa pemrograman lain di mana itu diubah, Anda cukup menggunakan "goto".
sumber
Anda melewatkan pernyataan istirahat. Jangan lupa untuk memasukkan pernyataan istirahat bahkan dalam kasus default.
sumber
sumber
switch (ch)
yang berikut ini.char vowelCheckChar = ( (Char.ToLower(ch) == 'y') ? ( ((new Random()).Next(2) == 0) ? ch : 'a' ) : ch ); // char vowelCheckChar = switch (vowelCheckChar)
Maaf, harus. ;)