Dim orig = "12344321678900987"
Dim res = Enumerable.Range(0,orig.Length\8).[Select](Function(i) orig.Substring(i*8,8))
此代码使用一些简洁的语言技巧来减少将字符串消化成更小的段所需的代码量。从里到外,先有一个Lambda Expression:
Function(i) orig.Substring(i * 8, 8)
这是一种“内联”创建 Subs 或 Functions 的奇特方式。它基本上等同于:
Function subStr(ByVal i As Integer) As String
Return orig.Substring(i * 8, 8)
End Function
下一部分使用Enumerable class 和它的Range method 生成一系列数字以输入 lambda。
Enumerable.Range(0, orig.Length \ 8)
这是一种更高级的写作方式:
For i As Integer = 0 To (orig.Length \ 8)
'Do something with i
End For
.[Select] 有点神奇,它在循环(或范围)中获取当前的i,并允许使用它。在这个例子中是:
subStr(i)
所以这个简洁的单行作业也可以写成:
Dim orig As String = "12344321678900987"
Dim res as String()
For i As Integer = 0 To (orig.Length \ 8)
Array.Resize(res, res.Length + 1)
res(res.Length - 1) = subStr(i)
End For
Function subStr(ByVal i As Integer) As String
Return orig.Substring(i * 8, 8)
End Function