子字符串是字符串数组中的字符串值

本文关键字:字符串 数组 | 更新日期: 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() .