子字符串是字符串数组中的字符串值
本文关键字:字符串 数组 | 更新日期: 2023-09-27 18:18:44
我有一个传递给方法的字符串数组:
private DataTable buildDataTableFromErrorPairs(string[] ErrorPairs)
{ ... }
我想辨别数组中的字符串长度是否大于150个字符&如果是的话,将其截断。我知道数组中最多只能有一个长度大于150的字符串。尝试了一些LINQ,但显然原始字符串没有改变:
var error = ( from e in ErrorPairs
where e.Length > 150
select e
).FirstOrDefault();
error = error.Substring(0, 100);
尝试这个lambda可能更接近:
ErrorPairs = ErrorPairs.Select(s => s.Substring(0, 150)).ToArray();
在找到&之后,我可能需要创建一个新的字符串数组。将违规值添加子字符串?我通常在WPF中工作并使用List<T>
,因此删除&添加元素!
如果你想使用LINQ,你必须创建一个新的数组,因为LINQ不处理输入。
您可以使用for
循环代替:
bool foundTooLongError = false;
for (int i = 0; i < ErrorPairs.Length; i++)
{
if (ErrorPairs[i].Length > 150)
{
ErrorPairs[i] = ErrorPairs[i].Substring(0, 150); // replace
foundTooLongError = true;
break; // only you are sure there is just one
}
}
它将遍历整个列表并替换所有不合适的行。显然,如果你知道它只有一个,你可以在找到一个太长的字符串后break;
。
首先,如果您想知道数组中是否至少有一个大于150的字符串,您可以使用:
Boolean error = ErrorPairs.Any(e => e.Length > 150);
那么,对于截断数组,使用
就几乎可以得到答案了ErrorPairs = ErrorPairs.Select(s => s.Substring(0, 150)).ToArray();
修改为:
ErrorPairs = ErrorPairs.Select(s => s.Length > 150 ? s.Substring(0, 150) : s).ToArray();
就这些
你就快成功了。您可以在LINQ语句中使用Substring
:
var error = (from e in ErrorPairs
where e.Length > 150
select e.Substring(0,150)).SingleOrDefault();
另外,因为最多只能匹配一个,你可以使用SingleOrDefault()
.