下面的代码将一个字符串拆分为七个字符的字符串,每个字符串成一个数组。有人可以详细说明它的工作原理吗?
Dim orig = "12344321678900987"
Dim res = Enumerable.Range(0,orig.Length\8).[Select](Function(i) orig.Substring(i*8,8))
答案 0 :(得分:0)
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)
这是一种创建子内联或函数内联的奇特方式。它基本上等同于:
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