windows-runtime - 如何区分空 Platform.String 和空 Platform.String^

标签 windows-runtime

我们正在验证函数输入时方法参数不为空,但这不适用于 Platform::String (或 Platform.String ,C# 或 C++ 之间没有区别),因为它们用空实例重载空字符串的语义。

考虑一下,总是会抛出异常:

auto emptyString = ref new Platform::String();

// Now, emptyString.IsEmpty() will be true

if (emptyString == nullptr)
{
    throw ref new Platform::InvalidArgumentException();
}

该变量具有非空值,但 ==比较运算符已重载,因此将其与 nullptr 进行比较返回 true,因为 String实例为空。

据我所知,这使我们无法在 String 的函数入口处进行适当的空检查。 s。真的是这样吗?

最佳答案

Windows 运行时中没有“空字符串”。 “Null”和“empty”对于字符串的含义相同。

尽管Platform::String使用 ^语法并且看起来像一个引用类型,但它不是:它是 Windows 运行时基本类型的投影, HSTRING . “空”HSTRING 与空 HSTRING 无法区分。

即使一个 Platform::String^似乎是“null”(例如在调试器中),将其视为空字符串是安全的。您可以将其用于串联,请调用 s->Length() , 等等。

在 C# 中,一个 string可以为空(因此您可以测试它是否为空),但您永远不会得到空值 string来自 Windows 运行时调用,并且您不能将空字符串作为参数传递给 Windows 运行时函数(这样做会在 ABI 边界产生异常)。

关于windows-runtime - 如何区分空 Platform.String 和空 Platform.String^,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214515/

相关文章:

c# - 创建新的调度程序

windows-runtime - 从辅助程序集中部署支持文件

wpf - Windows 8 开发 WPF 或 Windows Store XAML

windows-runtime - Metro 风格的应用程序能否安装在市场框架之外?

c# - 如何将焦点放在 OnNavigatedTo 事件中的 TextBox 上?

javascript - Windows 8 (JavaScript) : Multiple <video> tags with same webcam source: Possible?

c# - Windows Phone 8.1 检查密码是否设置否则加载新页面

c# - Windows 8 - 如何更改动态平铺背景图像?

c# - 是否可以在 C# 中编写将在 Windows 8 Metro 环境中运行的 Ping 类?

Tegra 4 Surface 2 上的 C++ amp