2

それで、私は最近、JavascriptとWinRTで顔をしかめる瞬間がありました。基本的に、私はWinRT APIを開発しているので、Javascript、C ++、およびC#でうまく機能するはずです。渡された値がnullの場合に特別な処理を行うAPIのプロパティがあります。したがって、たとえば:

public string Foo
{
  get
  {
    return foobar.ToString();
  }
  set
  {
    if(string.IsNullOrEmpty(value))
    {
      foobar=SomeSpecialValue;
      return;
    }
    ParseIntoFoobar(value);
  }
}

これは私には完全に素晴らしいプロパティのように思えます。ただし、Javascriptから次のようなものを使用する場合:

myFoobar.foo=null;

ParseIntoFoobar結果は、 Why?からスローされた解析例外です。どうやらJavascriptのnullの値は、null`という単語を含む文字列"null"の値と同じだからです。

私が見たドキュメントから、これはC#のnullに変換されるか、この間抜けな結果ではなく、空の文字列になるはずです。実際、私には意味のない、本当に直感的でない振る舞いをすることができます。投影:

public string Biz{get;set;}

Javascript:

myObject.biz=null;
log(myObject.biz==null); //results in false

この「機能」を回避するための最良の方法は何ですか?nullを検出したいが、文字列が完全に無効ではない場合はどうすればよい"null"ですか?(ユーザー名などを考えてください)

4

1 に答える 1

0

普遍的に受け入れられる空の文字列 "" (string.Empty) を使用できます。

null が受け入れられない理由についての私の「推測」は、おそらく、すべてを互換性にするために起こっている型マッピングのトリックによるものです。C++ は、null 参照を '\0' (null 文字) に変換するような奇妙なことをしている可能性があります。これは空の文字列になります。

于 2013-01-22T20:33:53.583 に答える