With
簡単な 1 文字の変数名を作成することで、VB.Net を置き換えることができます。後でWith
必要になるため、実際にはコードが少なくなります。End With
たとえば、かなり頻繁に行う必要があったことの 1 つは、コントロール/ブレーク スタイル レポートのデータ テーブル内の行を反復処理することでした。
vb.net では、次のようになります。
Dim CurCustomerName As String
Dim CustomerSalesTotal As Decimal
Dim ds As DataSet = GetReportData()
With ds.Tables(0).Rows
Dim i As Integer = 0
While i < .Count
''//{
CurCustomerName = .Item(i)("CustName")
CustomerSalesTotal = 0
PrintHeaderLine(CurCustomerName)
While i < .Count AndAlso CurCustomerName = .Item(i)("CustName")
''//{
PrintItemLine(.Item(i)("OrderTotal"))
CustomerSalesTotal += .Item(i)("OrderTotal")
i+= 1
End While ''//}
PrintSubTotalLine(CustomerSalesTotal)
End While ''//}
End With
C# は次のようになります。
string CurCustomerName;
Decimal CustomerSalesTotal;
DataSet ds = GetReportData();
DataRowCollection r = ds.Tables[0].Rows;
int i=0;
while (i<r.Count)
{
CurCustomerName = r[i]["CustName"];
CustomerSalesTotal = 0;
PrintHeaderLine(CurCustomerName);
while (i<r.Count && CurCustomerName == r[i]["CustName"])
{
PrintItemLine(r[i]["OrderTotal"]);
CustomerSalesTotal += r[i]["OrderTotal"];
i++;
}
PrintSubTotalLine(CustomerSalesTotal);
}
ここで注意すべきことは、VB はWITH
配列インデックスと組み合わせることができず.Item
、特定のことについてはプロパティを調べる必要があったため、C# バージョンでは実際にはタイピングが少なくて済みました。ここでは大したことではありませんが、レポートに 2 つではなく 20 のフィールドがあり、1 つではなく 3 つの項目でブレークする必要があると想像してください。
もちろん、C# で示した手法を VB にも使用できます。しかし、注意すべき主なことは、WITH
実際にはあまり効果がないということです。