我有一个传递给方法的字符串数组:
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>
因此不会出现删除问题的问题。添加元素!
答案 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();
。