true.ToString()
false.toString();
Output:
True
False
Czy istnieje uzasadniony powód, dla którego jest to „prawda”, a nie „prawda”? Łamie się podczas pisania XML, ponieważ typ logiczny XML ma małe litery , a także nie jest zgodny z prawdą / fałszem C # (choć nie jest pewien CLS).
Aktualizacja
Oto mój bardzo pospieszny sposób obejścia tego w C # (do użycia z XML)
internal static string ToXmlString(this bool b)
{
return b.ToString().ToLower();
}
Oczywiście to dodaje 1 dodatkową metodę do stosu, ale wszędzie usuwa ToLowers ().
return b.ToString().ToLower();
zreturn b ? "true" : "false";
. Czystsze, bardziej wydajne, mniej zależne od metody, która teoretycznie może zależeć od ustawień regionalnych (nawet jeśli nie jest to w obecnych implementacjach).Odpowiedzi:
Tylko ludzie z Microsoft mogą naprawdę odpowiedzieć na to pytanie. Chciałbym jednak przedstawić kilka ciekawych faktów na ten temat;)
Po pierwsze, tak mówi MSDN o metodzie Boolean.ToString () :
Oto zabawny fakt nr 1: w ogóle nie zwraca TrueString ani FalseString. Używa zakodowanych literałów „Prawda” i „Fałsz”. Nie przydałoby ci się, gdyby używał pól, ponieważ są oznaczone jako tylko do odczytu, więc nie można ich zmieniać.
Alternatywna metoda Boolean.ToString (IFormatProvider) jest jeszcze bardziej zabawna :
Jakie jest rozwiązanie Zależy, co dokładnie próbujesz zrobić. Cokolwiek to jest, założę się, że będzie to wymagało włamania;)
źródło
Boolean.ToString()
.bool.TrueString
to pole tylko do odczytu, które zawiera zakodowany literał „True” . Dlatego powiedzenie, że zwraca,TrueString
jest tym samym, co powiedzenie, że zwraca na stałe zapisany w nim literał „True” , biorąc pod uwagę, że zwracanie ciągu zawsze zwraca wartość, a nie odwołanie.TrueString
zostanie zmieniony, powiedzmy, na małe „prawda”, metodabool.ToString()
nadal zwróci literał „prawda” w postaci pascal.... ponieważ środowisko .NET zostało zaprojektowane do obsługi wielu języków.
System.Boolean (w mscorlib.dll) jest przeznaczony do wewnętrznego użytku przez języki do obsługi logicznego typu danych. C # używa wszystkich małych liter dla swoich słów kluczowych, stąd „bool”, „prawda” i „fałsz”.
VB.NET wykorzystuje jednak standardową obudowę: stąd „Boolean”, „True” i „False”.
Ponieważ języki muszą ze sobą współpracować, nie można uzyskać true.ToString () (C #), co daje inny wynik niż True.ToString () (VB.NET). Projektanci CLR wybrali standardową notację obudowy CLR dla wyniku ToString ().
Reprezentacja ciągu logicznej wartości true jest zdefiniowana jako Boolean.TrueString.
(Podobnie jest w przypadku System.String: C # przedstawia go jako typ „string”).
źródło
ToString()
i zmuszony do korzystania z niegoIf(b, "True", "False")
. Więc c # użytkownik taki jak ja musi poświęcić się, aby użyćToLower()
:)W przypadku Xml można użyć metody XmlConvert.ToString .
źródło
Prosty kod można przekonwertować na małe litery.
Jednak konwersja „prawdziwej” z powrotem na „prawdziwą” nie jest tak prosta.
to jest to, czego używam do wyjścia XML.
źródło
ToString()
wyniku logicznego .ToLowerInvariant()
.Jak to nie jest kompatybilne z C #? Boolean.Parse i Boolean.TryParse nie rozróżniają wielkości liter, a parsowanie odbywa się poprzez porównanie wartości z Boolean.TrueString lub Boolean.FalseString, które są „Prawda” i „Fałsz”.
EDYCJA: Patrząc na metodę Boolean.ToString w reflektorze okazuje się, że ciągi są zakodowane na stałe, więc metoda ToString wygląda następująco:
źródło
That's probably the only context in C# where the construct "if (!this)" is valid!
mi wyzwanie, przegrałeś . gist.github.com/Steinblock/10df18afb948866be1ba - Również dzisiaj jest 200.return this ? "True" : "False";
? (Kolejny niezwykły przypadek, którego często nie widziszthis
jako?:
warunek, ale tutaj miałby sens).Znam powód, dla którego już został rozwiązany, ale jeśli chodzi o „niestandardowe” formatowanie boolowskie, mam dwie metody rozszerzenia, bez których nie mogę żyć :-)
Użycie jest banalne. Poniższe konwertuje różne wartości bool na ich portugalskie reprezentacje:
źródło
Powodem
true
jest „prawda” z powodu silnej więzi Microsoftu ze standardami XML.Z Wikipedii : „Extensible Markup Language (XML) to język znaczników, który definiuje zestaw reguł kodowania dokumentów w formacie, który jest zarówno czytelny dla człowieka, jak i maszynowy”.
Czytelny dla człowieka jest subiektywny, ale w oczach XML preferowane jest użycie słowa „Jeden” zamiast liczby „1”. Zauważysz, że dzieje się to za pomocą wyliczeń, ponieważ słowo jest serializowane zamiast jego wartości („FirstOption” zamiast „0” lub „1”).
Podobnie tekst zwykle występuje po CamelCasing . Dlatego zamiast „ciąg” XML preferuje „Ciąg”. Właśnie dlatego Boolean.TrueString ma wartość „True”, a Boolean.FalseString jest domyślnie „False”.
źródło
Prawdopodobnie wynika to ze starych czasów VB NOT .Net, kiedy bool.ToString produkował wartość True lub False.
źródło