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

时间:2015-10-22 11:08:17

标签: c# arrays string linq

我有一个传递给方法的字符串数组:

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();

据我发现,在我发现&amp; amp;包含违规价值?我通常在WPF工作并使用List<T>因此不会出现删除问题的问题。添加元素!

3 个答案:

答案 0 :(得分:5)

如果你想使用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;

答案 1 :(得分:3)

首先,如果你想知道阵列中是否至少有一个大于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();

这就是全部;)

答案 2 :(得分:2)

你几乎就在那里。您可以在LINQ语句中使用[stringWithFormat:" %@, %d", "a", 5 ];

Substring

此外,由于最多只能进行一场比赛,因此您可以使用var error = (from e in ErrorPairs where e.Length > 150 select e.Substring(0,150)).SingleOrDefault();