gpt4 book ai didi

c# - 函数返回的字符串

转载 作者:行者123 更新时间:2023-11-30 12:15:31 24 4
gpt4 key购买 nike

如果我写下面的代码:

if(string.IsNullOrEmpy(myObj.GetString()))
{
var myString = myObj.GetString() + myObj.GetString();
}

我的函数 GetString() 将被调用 3 次,然后它可以执行 3 次一些复杂的代码。有没有比以下更简单的方法:

var firstString = myObj.GetString();
if(!string.IsNullOrEmpy(firstString))
{
var myString = firstString + firstString;
}

只执行一次 GetString() 中的代码?

最佳答案

您可以使它更复杂并具有 IsChanged bool 值,如果对象中的任何内容发生更改,请将 IsChanged 设置为 true,然后重建字符串,否则返回最后构建的字符串,但是您需要添加同步和它可能不值得付出代价。

所以,多头和空头是,第二种情况一般是最好的情况。它简单、直接且高效。

UPDATE:这里很难说更新场景是什么。因此,让我们看几个。

1).如果您只是根据应用程序的需要更新字符串,并且该字符串是使用某种复杂方法创建的,则只需使用一个新的更新方法,然后将当前字符串作为属性返回。然后,您可以查询 MyString 属性,这将是一个简单的返回。

public class SomeClass
{
public string MyString { get; private set; }

public void UpdateString(...)
{
// DO YOUR COMPLEX LOGIC

MyString = ... new value ...
}
}

2).或者,如果它只是一个没有复杂逻辑的简单字符串,您可以让应用程序负责创建和分配它:

public class SomeClass
{
public string MyString { get; set; }
}

...

myObj.MyString = SomeComplexLogicToBuildString();

但正如我所说,只有当字符串表示独立于对象的状态时才会如此。

3).如果它基于对象的状态并在对象状态更改时更改,则可以让字符串在发生更改时重新创建:

public class SomeClass
{
private bool _hasChanged = true;
private string _previousString = null;


public string MyString
{
get
{
if (_hasChanged)
{
_hasChanged = false;
_previousString = .... your complex string building logic ....
}

return _previousString;
}
}

public int OtherProperties
{
get { return _otherField; }
set { _otherField = value; _hasChanged = true; }
}

但是再一次,如果它是多线程使用,你可能想要同步它。

但是这就是如果您想要缓存该值,这样它就不会每次都作为类本身的责任进行重建。

确实,最简单和最好的选择就是使用第二种方法,如果您在一种方法中多次使用它,只需设置一个临时变量并使用它。

关于c# - 函数返回的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162182/

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