gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:43:02 25 4
gpt4 key购买 nike

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

它的一个类是这样的:

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

UI 在 WinJS 中,我有以下内容:

var b = dataInstance.theGoods;

问题是我得到一个异常并且属性中包含以下内容:

System.ArgumentNullException异常 在 System.StubHelpers.HStringMarshaler.ConvertToNative(字符串管理)

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

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

虽然 string.Empty 确实有效,但它在语义上与 null 不同,并且在某些情况下,empty 是有效的并且与 null 不同。

如果我将属性的类型更改为“object”,那么它确实有效,但是当它确实应该是一个字符串时公开一个对象似乎很讨厌。有任何想法吗?文档对此很清楚

最佳答案

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

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

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

关于c# - 尝试从 WinJS 读取 C# WinRT 组件中的空字符串时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12980915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com