2

因此,我最近与 Javascript 和 WinRT 面对面交流。基本上,我正在开发一个 WinRT API,所以它应该可以很好地与 Javascript、C++ 和 C# 配合使用。如果传入的值为空,我在 API 中有一个属性可以执行特殊操作。因此,例如:

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

对我来说,这似乎是一个非常好的财产。但是,当您在 Javascript 中使用类似这样的内容时:

myFoobar.foo=null;

结果是从ParseIntoFoobar为什么抛出解析异常?因为显然 Javascript 中的 null 值"null"就像在包含单词 null` 的字符串中一样

从我看到的文档来看,这应该导致 C# 转换为 null,或者它应该导致一个空字符串,而不是这个愚蠢的结果。事实上,你可以做出一些对我来说毫无意义的非常不直观的行为。投影:

public string Biz{get;set;}

Javascript:

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

解决此“功能”的最佳方法是什么?"null"对于我想要检测空值但字符串并非完全无效的情况,我应该怎么做?(想想用户名或类似的东西)

4

1 回答 1

0

您可以只使用将被普遍接受的空字符串 "" (string.Empty)。

我关于为什么 null 不可接受的“猜测”可能是因为某些类型映射技巧正在发生以使所有内容兼容。C++ 可能会做一些奇怪的事情,比如将空引用转换为 '\0'(空字符),这将是一个空字符串。

于 2013-01-22T20:33:53.583 回答