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

前端之家收集整理的这篇文章主要介绍了尝试从WinJS中读取C#WinRT组件中的空字符串时出现异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下情况:
C#中的数据库编译为 Windows运行时组件.

其中一个类似如下:

public sealed class MyData
{
  string TheGoods { get; private set;}
}

用户界面是在WinJS,我有以下:

var b = dataInstance.theGoods;

问题是我收到一个异常,属性中有以下内容

System.ArgumentNullException
在System.StubHelpers.HStringMarshaler.ConvertToNative(String managed)

看看HStringMarshaler.ConvertToNative的实现,如果字符串为空,它似乎抛出.

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

虽然string.Empty工作,但这在语义上与null无关,在某些情况下,空是有效的,不同于null.

如果我将属性的类型更改为“object”,那么它的工作正常,但是当它真的应该是一个字符串时,暴露一个对象似乎是讨厌的.
有任何想法吗?这个文件很简单

解决方法

Windows运行时字符串类型是一个值类型,没有空值.为此,.NET投影禁止跨Windows运行时ABI边界传递一个空.NET字符串.

Windows运行时使用的字符串类型是HSTRING类型.虽然此类型没有空值,但它确实有一个空表示(即C中,HSTRING s = nullptr;是有效的).具有空表示形式的HSTRING是一个空字符串.

.NET投影将这个空表示转换为空字符串(String.Empty),用于从ABI边界进入的字符串,并禁止实际的空.NET字符串通过ABI边界传回.

原文链接:https://www.f2er.com/c/116324.html

猜你在找的C&C++相关文章