C# 我应该如何解决WinRT JS说null是“空”的问题;空“;?
因此,我最近用Javascript和WinRT进行了一次面部掌心体验。基本上,我正在开发一个WRRTAPI,所以它应该与JavaScript、C++和C语言结合。我在API中有一个属性,如果传入的值为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
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分钟左右讨论这种行为