Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该如何解决WinRT JS说null是“空”的问题;空“;?_C#_Javascript_Null_Windows Runtime_Projection - Fatal编程技术网

C# 我应该如何解决WinRT JS说null是“空”的问题;空“;?

C# 我应该如何解决WinRT JS说null是“空”的问题;空“;?,c#,javascript,null,windows-runtime,projection,C#,Javascript,Null,Windows Runtime,Projection,因此,我最近用Javascript和WinRT进行了一次面部掌心体验。基本上,我正在开发一个WRRTAPI,所以它应该与JavaScript、C++和C语言结合。我在API中有一个属性,如果传入的值为null,它将执行特殊操作。例如: public string Foo { get { return foobar.ToString(); } set { if(string.IsNullOrEmpty(value)) { foobar=Som

因此,我最近用Javascript和WinRT进行了一次面部掌心体验。基本上,我正在开发一个WRRTAPI,所以它应该与JavaScript、C++和C语言结合。我在API中有一个属性,如果传入的值为null,它将执行特殊操作。例如:

public string Foo
{
  get
  {
    return foobar.ToString();
  }
  set
  {
    if(string.IsNullOrEmpty(value))
    {
      foobar=SomeSpecialValue;
      return;
    }
    ParseIntoFoobar(value);
  }
}
对我来说,这似乎是一个完美的财产。但是,当您使用Javascript中的类似内容时:

myFoobar.foo=null;
myObject.biz=null;
log(myObject.biz==null); //results in false
结果是从
ParseIntoFoobar
Why抛出一个解析异常?因为Javascript中null的值显然是
“null”
,就像中包含null一词的字符串一样

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

public string Biz{get;set;}
Javascript:

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

解决这个“功能”的最佳方法是什么?如果我想检测null,但是
“null”
作为字符串并不完全无效,我应该怎么做?(想想用户名或类似的东西)

您可以使用空字符串“”(string.empty),这将被普遍接受


我对null不可接受的原因的“猜测”可能是因为某种类型映射技巧使所有内容都兼容。C++可能会做一些奇怪的事情,比如把空引用转换成“0”(空字符),然后它会是一个空字符串。

@ bFavaRtto,在WRRT中,没有空字符串。我同意。在C++中,传入字符串参数的空指针将导致空字符串…但这不是一个空字符串。这可能是迄今为止我见过的微软做的最奇怪的事情,难道不是
公共字符串吗?Biz{get;set;}
?@bfavaretto no,因为string已经是引用类型,而且WinRT中没有null之类的东西对不起,但是我完全不知道WinRT。但是Wikipedia说:“在WinRT中,字符串是不可变的,不允许使用null值。如果使用具有null语义的语言将null值传递给WinRT中的字符串,则该值将转换为空字符串。”因此,它应该转换为
,而不是
“null”
。@bfavaretto是的,这是我的观点。。但它是not@Earlz-与草率但广泛使用的null或empty约定不同,只需对empty进行标准化。有关这是出于设计和(某种)原因的陈述,请参阅。它会在40分钟左右讨论这种行为