true.ToString()
false.toString();
Output:
True
False
Apakah ada alasan yang sah untuk itu menjadi "Benar" dan bukan "benar"? Itu rusak ketika menulis XML sebagai tipe boolean XML adalah huruf kecil , dan juga tidak kompatibel dengan C # benar / salah (meskipun tidak yakin tentang CLS).
Memperbarui
Ini adalah cara saya yang sangat rumit untuk menyiasatinya dalam C # (untuk digunakan dengan XML)
internal static string ToXmlString(this bool b)
{
return b.ToString().ToLower();
}
Tentu saja itu menambahkan 1 metode lagi ke stack, tetapi menghilangkan ToLowers () di mana-mana.
return b.ToString().ToLower();
denganreturn b ? "true" : "false";
. Lebih bersih, lebih efisien, kurang tergantung pada metode yang secara teoritis dapat bergantung pada lokal (meskipun tidak dalam implementasi saat ini).Jawaban:
Hanya orang-orang dari Microsoft yang dapat menjawab pertanyaan itu. Namun, saya ingin menawarkan beberapa fakta menyenangkan tentang hal itu;)
Pertama, ini adalah apa yang dikatakan di MSDN tentang metode Boolean.ToString () :
Inilah fakta menyenangkan # 1: itu tidak mengembalikan TrueString atau FalseString sama sekali. Ini menggunakan hardcoded literals "True" dan "False". Tidak akan ada gunanya bagimu jika menggunakan bidang, karena mereka ditandai sebagai hanya baca, jadi tidak ada perubahan.
Metode alternatif, Boolean.ToString (IFormatProvider) bahkan lebih lucu:
Apa solusinya? Tergantung pada apa yang sebenarnya Anda coba lakukan. Apa pun itu, saya yakin itu akan membutuhkan hack;)
sumber
Boolean.ToString()
.bool.TrueString
adalah bidang baca-saja yang berisi literal hardcoded "True" . Oleh karena itu, mengatakan bahwa ia mengembalikanTrueString
adalah sama dengan mengatakan itu mengembalikan hardcoded literal "True" yang tersimpan di dalamnya, mengingat bahwa mengembalikan string selalu mengembalikan nilai dan bukan referensi.TrueString
diubah, katakanlah, menjadi huruf kecil "true", metodebool.ToString()
ini masih akan mengembalikan case pascal "True" literal.... karena lingkungan .NET dirancang untuk mendukung banyak bahasa.
System.Boolean (dalam mscorlib.dll) dirancang untuk digunakan secara internal oleh bahasa untuk mendukung tipe data boolean. C # menggunakan semua huruf kecil untuk kata kunci, karenanya 'bool', 'true', dan 'false'.
Namun VB.NET menggunakan casing standar: karenanya 'Boolean', 'True', dan 'False'.
Karena bahasa harus bekerja bersama, Anda tidak bisa memiliki true.ToString () (C #) memberikan hasil yang berbeda untuk True.ToString () (VB.NET). Desainer CLR memilih notasi casing CLR standar untuk hasil ToString ().
Representasi string dari true boolean didefinisikan sebagai Boolean.TrueString.
(Ada kasus serupa dengan System.String: C # menyajikannya sebagai tipe 'string').
sumber
ToString()
dan mereka dipaksa untuk menggunakan sukaIf(b, "True", "False")
. Jadi c # pengguna seperti saya harus berkorban untuk menggunakanToLower()
:)Untuk Xml Anda dapat menggunakan metode XmlConvert.ToString .
sumber
Ini kode sederhana untuk mengonversi itu menjadi huruf kecil semua.
Namun, tidak sesederhana itu untuk mengubah "benar" menjadi "Benar".
adalah apa yang saya gunakan untuk output xml.
sumber
ToString()
hasil boolean .ToLowerInvariant()
.Bagaimana itu tidak kompatibel dengan C #? Boolean.Parse dan Boolean.TryParse adalah case-sensitive dan parsing dilakukan dengan membandingkan nilainya dengan Boolean.TrueString atau Boolean.FalseString yang "Benar" dan "Salah".
EDIT: Ketika melihat metode Boolean.ToString di reflektor ternyata string dikodekan sehingga metode ToString adalah sebagai berikut:
sumber
That's probably the only context in C# where the construct "if (!this)" is valid!
Anda menantangku, Anda longgar. gist.github.com/Steinblock/10df18afb948866be1ba - Juga hari ini adalah hari jadi ke-200 dari George Boolereturn this ? "True" : "False";
? (Kasus lain yang tidak biasa karena Anda tidak sering melihatthis
sebagai suatu?:
kondisi, tetapi di sini masuk akal.)Saya tahu alasan mengapa cara ini telah ditangani, tetapi ketika datang ke format "custom" boolean, saya punya dua metode ekstensi yang saya tidak bisa hidup tanpanya :-)
Penggunaan itu sepele. Berikut ini mengkonversi berbagai nilai bool ke representasi Portugis mereka:
sumber
Alasannya
true
adalah "Benar" adalah karena ikatan kuat Microsoft dengan standar XML.Dari Wikipedia : "Extensible Markup Language (XML) adalah bahasa markup yang mendefinisikan seperangkat aturan untuk menyandikan dokumen dalam format yang dapat dibaca oleh manusia. dan bisa mesin."
Dapat dibaca manusia bersifat subyektif, tetapi di mata XML, menggunakan kata "One" sebagai ganti angka "1" lebih disukai. Anda akan melihat ini terjadi menggunakan enum, karena kata tersebut menjadi bersambung bukan dari nilainya ("FirstOption", bukan "0" atau "1").
Demikian juga, teks biasanya mengikuti CamelCasing . Oleh karena itu, alih-alih "string", XML lebih suka "String". Inilah sebabnya mengapa Boolean.TrueString adalah "True" dan Boolean.FalseString adalah "False" secara default.
sumber
Ini mungkin berasal dari VB lama TIDAK. Net hari ketika bool.ToString menghasilkan Benar atau Salah.
sumber