true.ToString()
false.toString();
Output:
True
False
Existe uma razão válida para ser "verdadeiro" e não "verdadeiro"? Ele quebra ao escrever XML, pois o tipo booleano do XML é minúsculo e também não é compatível com true / false do C # (embora não tenha certeza sobre o CLS).
Atualizar
Aqui está minha maneira muito hacky de contornar isso em C # (para uso com XML)
internal static string ToXmlString(this bool b)
{
return b.ToString().ToLower();
}
É claro que isso adiciona mais 1 método à pilha, mas remove ToLowers () em todos os lugares.
return b.ToString().ToLower();
porreturn b ? "true" : "false";
. Mais limpo, mais eficiente, menos dependente de um método que teoricamente poderia depender da localidade (mesmo que não nas implementações atuais).Respostas:
Somente pessoas da Microsoft podem realmente responder a essa pergunta. No entanto, gostaria de oferecer alguns fatos interessantes sobre o assunto;)
Primeiro, é o que diz no MSDN sobre o método Boolean.ToString () :
Aí vem o fato divertido # 1: ele não retorna TrueString ou FalseString. Ele usa literais codificados como "Verdadeiro" e "Falso". Não faria nenhum bem se eles usassem os campos, porque eles são marcados como somente leitura, para que não haja como alterá-los.
O método alternativo, Boolean.ToString (IFormatProvider) é ainda mais engraçado:
Qual a solução? Depende do que exatamente você está tentando fazer. Seja o que for, aposto que será necessário um hack;)
fonte
Boolean.ToString()
.bool.TrueString
é um campo somente leitura que contém o literal codificado como "True" . Portanto, dizer que ele retornaTrueString
é o mesmo que dizer que ele retorna o literal codificado "True" armazenado nele, já que o retorno de uma string sempre retorna o valor e não uma referência.TrueString
for alterado, digamos, para minúsculas "true", o métodobool.ToString()
ainda retornará o caso pascal "True" literal.... porque o ambiente .NET foi projetado para suportar vários idiomas.
O System.Boolean (em mscorlib.dll) foi projetado para ser usado internamente pelos idiomas para oferecer suporte a um tipo de dados booleano. C # usa todas as letras minúsculas para suas palavras-chave, portanto 'bool', 'true' e 'false'.
No entanto, o VB.NET usa caixa padrão: daí 'Boolean', 'True' e 'False'.
Como os idiomas precisam trabalhar juntos, você não poderia ter true.ToString () (C #), dando um resultado diferente a True.ToString () (VB.NET). Os designers do CLR escolheram a notação de caixa padrão do CLR para o resultado ToString ().
A representação em cadeia do valor booleano true é definida como Boolean.TrueString.
(Existe um caso semelhante com System.String: C # o apresenta como o tipo 'string').
fonte
ToString()
e forçou a usar comoIf(b, "True", "False")
. Então c # usuário como eu precisa sacrificar para usoToLower()
:)Para o Xml, você pode usar o método XmlConvert.ToString .
fonte
É um código simples converter tudo isso para minúsculas.
Não é tão simples converter "true" de volta para "True", no entanto.
é o que eu uso para a saída xml.
fonte
ToString()
resultado booleano .ToLowerInvariant()
.Como isso não é compatível com C #? Boolean.Parse e Boolean.TryParse não fazem distinção entre maiúsculas e minúsculas e a análise é feita comparando o valor com Boolean.TrueString ou Boolean.FalseString que são "True" e "False".
EDIT: Ao olhar para o método Boolean.ToString no refletor, verifica-se que as seqüências de caracteres são codificadas permanentemente, portanto o método ToString é o seguinte:
fonte
That's probably the only context in C# where the construct "if (!this)" is valid!
Você me desafiou, você solta. gist.github.com/Steinblock/10df18afb948866be1ba - Também hoje é o birtday 200 de George Boolereturn this ? "True" : "False";
? (Outro caso incomum como você não vê frequentementethis
como uma?:
condição, mas aqui não faria sentido.)Sei que a razão pela qual ela é desse jeito já foi abordada, mas quando se trata de formatação booleana "personalizada", tenho dois métodos de extensão que não podem mais viver sem :-)
O uso é trivial. A seguir, converte vários valores bool para suas representações em português:
fonte
O motivo
true
é "Verdadeiro", devido ao forte vínculo da Microsoft com os padrões XML.Da Wikipedia : "Extensible Markup Language (XML) é uma linguagem de marcação que define um conjunto de regras para codificar documentos em um formato que é legível por humanos e legível por máquina".
Legível por humanos é subjetivo, mas aos olhos do XML, é preferível usar a palavra "Um" no lugar de um número "1". Você notará que isso acontece usando enumerações, pois a palavra é serializada em vez de seu valor ("FirstOption" em vez de "0" ou "1").
Da mesma forma, o texto geralmente segue o CamelCasing . Portanto, em vez de "string", o XML prefere "String". É por isso que Boolean.TrueString é "True" e Boolean.FalseString é "False" por padrão.
fonte
Provavelmente isso remete aos velhos tempos do VB NOT .Net quando o bool.ToString produziu True ou False.
fonte