So che potrebbe sembrare una domanda molto stupida, ma non ho risposte su questo. Uno dei nostri utenti ha segnalato un bug di recente e mi sono reso conto che un vecchio bit di codice utilizzava != string.Empty
piuttosto che IsNullOrEmpty()
. L'ho risolto con IsNullOrEmpty()
e ora funziona bene, ma mi piacerebbe davvero capire il problemaConfronto tra stringhe con operatore! = Che fornisce risultati diversi?
Il problema è che lo stesso identico bit di codice viene eseguito in modo diverso su determinate macchine. Fondamentalmente ho un oggetto: context["MODE"]
, che dovrebbe essere vuoto. Ho aggiunto alcuni test su di esso per accedere:
contextBuilder.AppendLine("MODE: |" + context["MODE"] + "|");
contextBuilder.AppendLine("MODE != string.Empty: " + (context["MODE"] != string.Empty));
contextBuilder.AppendLine("MODE TRIM != string.Empty: " + (context["MODE"].ToString().Trim() != string.Empty));
contextBuilder.AppendLine("MODE.IsNullOrEmpty: " + string.IsNullOrEmpty(context["MODE"].ToString()));
contextBuilder.AppendLine("MODE.TRIM.IsNullOrEmpty: " + string.IsNullOrEmpty(context["MODE"].ToString().Trim()));
Qui sono i miei log su che informazioni di campo:
MODE: ||
MODE != string.Empty: False
MODE TRIM != string.Empty: False
MODE.IsNullOrEmpty: True
MODE.TRIM.IsNullOrEmpty: True
Ecco le sue tronchi:
MODE: ||
MODE != string.Empty: True
MODE TRIM != string.Empty: False
MODE.IsNullOrEmpty: True
MODE.TRIM.IsNullOrEmpty: True
Come si può vedere non v'è una differenza: MODE != string.Empty
è False per me (ha senso), vero per lui! MODE non è ovviamente nullo (altrimenti .ToString()
avrebbe avuto esito negativo) Il problema è stato risolto utilizzando IsNullOrEmpty ma sto cercando di capire esattamente perché questo non funziona su alcuni computer degli utenti e non su altri. In genere con i miei test alcuni di noi non hanno avuto problemi, altri lo hanno avuto.
Non capisco davvero cosa posso imparare a riguardo. Perché la sua modalità è diversa da null e String.Empty
, ma IsNullOrEmpty
restituisce true? Si noti inoltre che il trim è in realtà string.Empty
e
Grazie!
'IsNullOrEmpty' fa in realtà la parte vuota confrontando il' Length' a 0. – juharr
Prova anche stampare 'contesto [ "Mode"]. GetType(). Name' pure. – juharr
Puoi fornire maggiori dettagli sull'origine del valore in 'context [" MODE "]'? Inoltre, ti sei assicurato che le versioni di .NET fossero le stesse su entrambe le macchine? –