我有以下代码(对不起VB!)我希望避免使用<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/lib/ezomart.com.ezomart"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="ezomart.com.ezomart.Swipe">
<include
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/toolbar"
/>
<!--<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
android:background="@color/colorPrimary"
android:layout_below ="@id/toolbar"
/>-->
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable"
android:background="@color/colorPrimary"
android:layout_below ="@id/toolbar"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</RelativeLayout>
循环初始化public String setItemValue(Long longVal) {
return setItemValue(longVal.intValue());
}
的值(即&#34 ; 10,25,50&#34;)使用For Each
收集。
有办法做到这一点吗?就像String
lambda那样,它只会在Int32.TryParse
传递Function(x)
时添加String
集合中的项目?
Int32.TryParse
谢谢。
答案 0 :(得分:1)
我发现你的循环非常易读。但是如果你想使用LINQ,可以使用这个查询:
Dim allIntegers = From opt In options
Let intOpt = opt.TryGetInt32()
Where intOpt.HasValue
Select intOpt.Value
Dim optionsList As List(Of Integer) = allIntegers.ToList()
我使用这种扩展方法,它对LINQ查询很方便:
Module StringExtensions
<Extension()>
Public Function TryGetInt32(Str As String) As Nullable(Of Int32)
If Str Is Nothing Then Return Nothing
Dim num As Int32
If Int32.TryParse(Str, num) Then Return num
Return Nothing
End Function
End Module
此方法is much better比使用本地变量Int32.TryParse
存储。
答案 1 :(得分:1)
你拥有的循环清晰可读,但这是另一种方式:
Dim options = {"10", "25", "50", "foo"}
Dim optionVals = Array.ConvertAll(Of String, Int32)(options, Function(c)
Dim tmp As Int32 = 0
Int32.TryParse(c, tmp)
Return tmp
End Function).ToList()
将tmp
初始化为您想要用于错误值的默认值(-1,Int32.MinValue等)
另一种方法是调用解析器函数:
optionVals = Array.ConvertAll(Of String, Int32)(options, Function(c) IntParser(c)).ToList()
Private Function IntParser(s As String) As Int32
Dim n As Int32
If Int32.TryParse(s, n) Then
Return n
Else
Return 0
End If
End Function