使用Int32.TryParse初始化List(Of Integer)的任何方法

时间:2016-03-04 13:29:33

标签: arrays vb.net lambda initialization

我有以下代码(对不起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

谢谢。

2 个答案:

答案 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