2016年6月23日木曜日

.NET(VB) いまさらだけどVBでYieldを書いてみた

C#ではVisualStudio2005(C#2.0)でyieldが登場し、
VBではVisualStudio2012(VB11)でやっとyieldが使えるようになりました。

「いつか使ってみたいなぁ」と思っていたけれど、まったく使う機会がありませんでした。
もうね「このまま一生使うこともないのかなぁ」と思ってました。
しかし、この度やっとyieldを使ってみることができました!しかもVBで!

うれしかったですね。
「yield便利~♪」より「yieldやっと使えたよ~っ泣」って。

yield便利だけど使う機会がほぼないんですよね。
特に私のような末端の底辺PGにはw
しかもジェネリックの登場で自作コレクションを作る機会自体が減ってますからね。

今回はASP.NETで自作コレクションクラスを作る必要がありyieldを使ってみました。
(少しハマった部分もありました。別記事で書きます。)

yieldの使い方はネットにごろごろあるので自分用のメモ程度に記載しておきます。

VisualStuidio2013/Fw4.0/VB
Public Class MyCollection
    Implements IEnumerable(Of String)

    Private _items As New List(Of String)

    Public Iterator Function GetEnumerator() As IEnumerator(Of String) _
    Implements IEnumerable(Of String).GetEnumerator
        For Each s As String In Me._items
            Yield s
        Next
    End Function

    Public Function GetEnumerator1() As IEnumerator _
    Implements IEnumerable.GetEnumerator
        Return GetEnumerator()
    End Function
End Class

自作コレクションクラスをForEachでクルクルまわせたり、Linqで使えるようにするためにIEnumerable(Of T)を実装させます。
IEnumerable(Of T)を実装すると、GetEnumerator()メソッドとGetEnumerator1()メソッドを実装する必要があります。

GetEnumerator1()メソッドは、もう一方のGetEnumerator()を返すように実装します。
GetEnumerator()メソッドは、Yeildを使用できるようにIteratorキーワードを付けます。
Public Iterator Function GetEnumerator() As IEnumerator(Of …
あとはコレクションの要素をクルクル回して1コづつYeildで返してあげればOKです。

0 件のコメント: