これは非常にばかげた質問のように聞こえるかもしれませんが、私はこの回答には答えがありません。私たちのユーザーの1人が最近バグを報告しました。コードの古いコードがIsNullOrEmpty()
ではなく!= string.Empty
を使用していることに気付きました。私はIsNullOrEmpty()
で修正しましたが、今はうまく動作しますが、実際に問題を理解したいと思います。文字列と!=演算子を比較すると、結果は異なりますか?
実際には、特定のマシンで全く同じコードが実行されます。私は基本的にオブジェクトを持っています:context["MODE"]
、それは空であるはずです。私は、ログに記録することでいくつかのテストを追加しました:ここ
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()));
は、そのフィールドの詳細についての私のログです:ここでは
MODE: ||
MODE != string.Empty: False
MODE TRIM != string.Empty: False
MODE.IsNullOrEmpty: True
MODE.TRIM.IsNullOrEmpty: True
は彼のログです:あなたがそこに見ることができるように
MODE: ||
MODE != string.Empty: True
MODE TRIM != string.Empty: False
MODE.IsNullOrEmpty: True
MODE.TRIM.IsNullOrEmpty: True
されます1つの違い:MODE != string.Empty
は私のためにFalseです(意味をなさない)、彼のために真実! MODEは明らかにnullではありません(そうでないと.ToString()
は失敗します)。問題はIsNullOrEmptyを使用して解決されますが、これは特定のユーザーのマシンでは機能しない理由を正確に把握しようとしています。通常私のテストでは、私たちの何人かに問題はなく、他の人には問題がなかった。
私はそれについて何が学べるのか分かりません。彼のモードがnullで、String.Empty
と異なるのはなぜですか?IsNullOrEmpty
はtrueを返しますか?また、トリムが実際にstring.Empty
同様
はありがとうございあることに注意してください!
'IsNullOrEmpty'が実際に'コンテキスト[「モード」]プリントアウトも試してみてください0 – juharr
に 'Length'を比較することによって、空の部分を行います。 GetType()。Name'も同様です。 – juharr
'context [" MODE "]'で値の起源についてもっと詳しく説明できますか?また、両方のマシンで.NETのバージョンが同じであることを確認しましたか? –