gpt4 book ai didi

c# - 不用函数直接将字符串限制到一定长度

转载 作者:可可西里 更新时间:2023-11-01 08:06:07 24 4
gpt4 key购买 nike

不是 this 的副本.

我想让一个字符串有一个最大长度。它永远不应该超过这个长度。比方说 20 个字符的长度。如果提供的字符串大于 20,则取前 20 个字符串并丢弃其余字符串。

The该问题的答案显示了如何使用函数来限制字符串,但我想直接在没有函数的情况下进行。我希望每次写入字符串时都进行字符串长度检查。

以下是我不想做的事情:

string myString = "my long string";
myString = capString(myString, 20); //<-- Don't want to call a function each time

string capString(string strToCap, int strLen)
{
...
}

我能够用一个属性来完成这个:

const int Max_Length = 20;
private string _userName;

public string userName
{
get { return _userName; }
set
{
_userName = string.IsNullOrEmpty(value) ? "" : value.Substring(0, Max_Length);
}
}

然后我可以轻松地使用它而无需调用函数来限制它:

userName = "Programmer";

这个问题是我想要封顶的每个 string 都必须为它们定义多个变量。在这种情况下,_userNameuserName(属性)变量。

在不为每个字符串创建多个变量的情况下,有什么聪明的方法可以同时修改 string 时不必调用函数?

最佳答案

有趣的情况 - 我建议创建一个 struct 然后定义一个 implicit conversion operator为此,类似于 this Stack Overflow question 中所做的.

public struct CappedString
{
int Max_Length;
string val;

public CappedString(string str, int maxLength = 20)
{
Max_Length = maxLength;
val = (string.IsNullOrEmpty(str)) ? "" :
(str.Length <= Max_Length) ? str : str.Substring(0, Max_Length);
}

// From string to CappedString
public static implicit operator CappedString(string str)
{
return new CappedString(str);
}

// From CappedString to string
public static implicit operator string(CappedString str)
{
return str.val;
}

// To making using Debug.Log() more convenient
public override string ToString()
{
return val;
}

// Then overload the rest of your operators for other common string operations
}

稍后你可以像这样使用它:

// Implicitly convert string to CappedString
CappedString cappedString = "newString";

// Implicitly convert CappedString to string
string normalString = cappedString;

// Initialize with non-default max length
CappedString cappedString30 = new CappedString("newString", 30);

注意:不幸的是,这不是完美的解决方案 - 因为隐式转换没有提供将现有值传输到新实例的方法,任何使用非初始化的 CappedString需要将默认长度值分配给使用构造函数,否则其长度限制将恢复为默认值。

关于c# - 不用函数直接将字符串限制到一定长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41048585/

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