gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:18:49 32 4
gpt4 key购买 nike

我们正在验证函数输入时方法参数不为空,但这不适用于 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/

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