La chaîne n'était pas reconnu comme valide boolean
Je suis l'envoi de la représentation de chaîne d'une valeur booléenne à travers un socket et de lire l'autre extrémité.
void Send(bool value)
{
Socket.Send(value.ToString());
}
void Receive()
{
string message = Socket.Receive();
Console.WriteLine(message) //Always equal to either 'True' or 'False (without quotes)
bool result = bool.Parse(message) //here I get the format exception.
}
mais j'obtiens l'exception suivante lorsque j'essaie de l'analyser mon message
:
String was not recognized as a valid boolean
.
La valeur quand je reçois l'exception est la suivante: True
. Avec PAS d'espace.
Êtes-vous absolument sûr que c'est ce qui est ce qui est reçu? Je serais stupéfait si vous aviez trouvé un véritable bug dans le cadre de msdn.microsoft.com/en-us/library/system.boolean.parse.aspx
Quelle est la valeur de message quand vous obtenez l'exception?
Vous disposez de tous les caractères spéciaux dans votre message?
Essayez
Je voudrais prendre un coup d'oeil dans le débogueur à ce que la chaîne de caractères contient - ou mieux encore dans une fenêtre d'observation mis de message.ToCharArray() et voir si il y a aucun des caractères "spéciaux". Parfois, j'ai vu les caractères de contrôle dans les chaînes de caractères qui ne sont pas imprimés, mais sont toujours là.
Quelle est la valeur de message quand vous obtenez l'exception?
Vous disposez de tous les caractères spéciaux dans votre message?
Essayez
bool.Parse("True")
et voir si vous obtenez toujours un formatexception? Si vous ne le faites pas, alors votre message reçu n'est pas exactement "Vrai"...Je voudrais prendre un coup d'oeil dans le débogueur à ce que la chaîne de caractères contient - ou mieux encore dans une fenêtre d'observation mis de message.ToCharArray() et voir si il y a aucun des caractères "spéciaux". Parfois, j'ai vu les caractères de contrôle dans les chaînes de caractères qui ne sont pas imprimés, mais sont toujours là.
OriginalL'auteur Cheetah | 2013-01-24
Vous devez vous connecter pour publier un commentaire.
Au premier coup d'œil, je le considère comme ayant un problème avec l'inculte de l'espace..., mais ce n'est pas le cas, comme
Boolean.Parse
utiliseTryParse
et qui, à son tour, les garnitures de l'espace dans l'une de ses tentatives:Référence: http://referencesource.microsoft.com/#mscorlib/system/boolean.cs,e2a8f2e50ecf93c0,références
Donc, il doit y avoir quelque chose d'autre se passe. Peut-être il ya un problème avec le format UTF-8, ANSI, ASCII, etc. L'un de vos exigences est que vous voulez un bool, de sorte que vous n'aurez pas deux cas pour
True
etFalse
, alors pourquoi ne pas faire quelque chose comme ceci:EDIT:
Après la lecture de certains commentaires, il semble que vous attendez des cas au-delà de
True
ouFalse
, auquel cas le résultat pourrait être nulle. Je suggère quelque chose comme ceci:Donc, si le message contient
True
, c'esttrue
; siFalse
, c'estfalse
; sinon, c'estnull
, ce qui indique un message d'erreur. Vous pouvez ensuite vérifier pour voir siresult
estnull
et afficher le message non valide ou de faire autre chose. Je ne suis pas sûr de ce que votre routine est à partir de là.OriginalL'auteur B.K.
Essayez Ceci:
Non, si le message est "False", user2004810 's solution va toujours passer. bool.Analyser n'est pas nécessaire.
La méthode Equals("true") déjà retourner true/false, vous pas besoin d'un autre cas.
ne peut-on pas supposer que tout ce qui n'est pas vrai est faux ?
Pas De NotTrue != Faux, vous pouvez avoir un message d'erreur aussi.
OriginalL'auteur One Man Crew