尝试从WinJS读取C#WinRT组件中的空字符串时出现异常

尝试从WinJS读取C#WinRT组件中的空字符串时出现异常,c#,windows-runtime,winjs,C#,Windows Runtime,Winjs,我有以下情况: C#中的数据库编译为Windows运行时组件 它的一个类如下所示: public sealed class MyData { string TheGoods { get; private set;} } UI在WinJS中,我有以下功能: var b = dataInstance.theGoods; 问题是我得到了一个异常,并且属性中包含以下内容: System.ArgumentNullException 位于System.StubHelpers.HStringMarsh

我有以下情况: C#中的数据库编译为Windows运行时组件

它的一个类如下所示:

public sealed class MyData
{
  string TheGoods { get; private set;}
}
UI在WinJS中,我有以下功能:

var b = dataInstance.theGoods;
问题是我得到了一个异常,并且属性中包含以下内容:

System.ArgumentNullException 位于System.StubHelpers.HStringMarshaler.convertonative(字符串管理)

查看HStringMarshaler.converttontial的实现,如果字符串为null,它似乎会抛出

这是否意味着不可能向WinJS公开空字符串?这是WinJS限制还是适用于所有WinRT

虽然string.Empty可以工作,但它在语义上与null不同,在某些情况下,Empty是有效的,并且与null不同

如果我将属性的类型更改为“object”,那么它确实可以工作,但是当对象实际上应该是字符串时,暴露对象似乎很糟糕。
有什么想法吗?文档在这方面非常简单

Windows运行时字符串类型是一种值类型,没有空值。由于这个原因,.NET投影禁止跨Windows运行时ABI边界传递空.NET字符串

Windows运行时使用的字符串类型为。虽然这个类型没有空值,但它确实有空表示(即,在C++中,<代码> HStults= nulLpTr;< /Cord>是有效的)。带有空表示的
hs字符串
是空字符串


对于来自ABI边界的字符串,.NET投影将此空表示形式转换为空字符串(
string.empty
),并禁止实际的空.NET字符串通过ABI边界传回。

那么对于C#,是否可以安全地说类构造函数应该将字符串初始化为string.empty?如果文档更新后能提到它,那就太好了。那要看情况了。.NET字符串类型仍然是引用类型,可能为null。只有在跨越ABI边界传递字符串时,才不允许null(即,.NET字符串转换为Windows运行时HSTRING)。所以,可能仍然有空字符串有用的情况,您只需要确保在字符串跨越ABI边界之前检查它们。对…所以对于直接或通过接口返回到WinRT的类型,字符串应该初始化为空。谢谢