gpt4 book ai didi

c# - 字符串表现得像一个值类型

转载 作者:太空宇宙 更新时间:2023-11-03 17:07:13 24 4
gpt4 key购买 nike

我刚刚编写了一个函数,但我不明白为什么会得到这样的结果:

private void ReplaceIfEmpty(string originalValue, string newValue)
{
if (string.IsNullOrWhitespace(originalValue))
{
originalValue= newValue;
}
}

当我调用这个函数时,originalValue 没有更新。我的理解是字符串是一个类,因此它是一个引用类型,因此我传入的值应该更新。你能解释一下为什么不是吗?

最佳答案

这实际上与引用类型和值类型无关。

您正在更改参数的值:

originalValue= newValue;

对于没有 refout 修饰符的“普通”参数,该更改将永远不可见。

查看我的 article on parameter passing了解更多信息,以及我关于 reference types and value types 的文章以确保您理解为什么有时它“看起来”像默认情况下引用类型是通过引用传递的。 (它们不是:默认情况下所有参数都是按值传递的,只是对于引用类型,参数值是一个引用,而不是一个对象,所以对对象所做的更改仍然可见来电者。)

所以您可以使originalValue成为一个ref参数——但最好让该方法返回一个字符串 代替。我通常不愿意使用 ref 参数;没有它们,代码通常更容易理解。

关于c# - 字符串表现得像一个值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9399144/

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