【VB.NET】 空のIEnumerable(Of T) 他

仕事での開発中にプロダクトのコードの読めないところや実装の手段に困ったときなどに調べたことなどをストアしています。 ある程度量が貯まってきたら定期的に放出していこうと思います。

VB.NET,Angular,TypeScriptといったものがターゲットになることが多いです。

空のIEnumerable(Of T)の生成

Enumerable.Empty(TResult) メソッド (System.Linq)

' Create an empty sequence.
Dim empty As IEnumerable(Of Decimal) = Enumerable.Empty(Of Decimal)()

空の検証

Enumerable.Any(TSource) メソッド (IEnumerable(TSource)) (System.Linq)

Enumerable.Count(TSource) メソッド (IEnumerable(TSource)) (System.Linq)

これらを使えば良いでしょうか。

NUnit(Assert.That)で検証したかったので、

' Is hoge empty?
Assert.That(hoge, [Is].Empty)

でよさそうです。

Object同士の比較検証

DBからのデータを取得するクエリの結果をマッピングしたオブジェクトの検証(そのオブジェクトを取得/返却するFunctionの検証)。

=演算子やIs演算子、Equalsメソッドだと別インスタンスはfalseになるので

Dim result As hogeClass = get()
Dim expected As hogeClass = ~

Assert.That(result.property1, [Is].EqualTo(expected.property1))
Assert.That(result.property2, [Is].EqualTo(expected.property2))
...

プロパティ(カラム)が少なければこれでよさそう。

プロパティ多い場合これだとしんどくなります。演算子オーバーロードやEqualsメソッドを用意するのも手間だったので、オブジェクトをそれぞれJsonにシリアル化して文字列の値として比較しました。

Imports Newtonsoft.Json

Assert.That(JsonConvert.SerializeObject(result), [Is].EqualTo(JsonConvert.SerializeObject(expected)))

これはtrueになります。

Null許容型

Dim hoge As Integer? = Nothing

ヽ(~~~ )ノ ハテ?

webbibouroku.com

文字列補完(変数埋め込み)

Dim x = 10
$"{x}人"
' 10人

ヽ(~~~ )ノ ハテ?

d.hatena.ne.jp