2009-02-26 16 views
1

0ベースの場合、プレースホルダを追加して1ベースにするにはどうすればよいですか?ありがとうございました。Collection(Of T)は0ベースの配列または1ベースの配列ですか?

+2

これを考慮しても*本当に*良い理由があります。 0ベースのコンテナの世界で1ベースのコンテナに切り替えると、将来このコードを維持または使用しなければならないプログラマーが混乱することが保証されます。 –

+0

あなたの警告のおかげで、私は別の方法を見つけるでしょう –

答えて

8

0ベース。返信の質問は次のようになります:なぜを1ベースにしますか?拡張メソッドで

あなたは(あなたが望んでいた場合)可能性が行います

<Extension()> 
Public Function GetOneBased(Of T)(ByVal list As IList(Of T), ByVal index As Integer) As T 
    Return list(index-1) 
End Function 

<Extension()> 
Public Sub SetOneBased(Of T)(ByVal list As IList(Of T), ByVal index As Integer, ByVal value As T) 
    list(index-1) = value 
End Sub 

は、(ほぼすべてのコレクションから)を使用します。

Dim foo = data.GetOneBased(1) 
data.SetOneBased(1, bar) 
+0

古いコードは1ベースのコレクションを使用していたので、今は単純化していますが、0ベースの場合、ステートメントの変更が必要です。だから... –

+1

アダム:VB翻訳サービスのおかげで;-p –

2

これは0ベースです。あなたがそれを1にしたいのであれば、なぜインデックスを受け入れる読み込みメソッドを作成してそれを削除し、それを使って値を返すのですか?

0

あなたは位置0にある項目を挿入するためにInsert(int index, T item)を使用することができますしかし、私はあなたが0ベースのコレクションとしてインデックスの算術と参照を行う方が良いと思います。これは、ほとんどのプログラマーがあなたが期待した後に来るものです。 @ Robertの拡張メソッドの考え方には価値がありますが、コードの最終的な保守担当者を混乱させるでしょう。

0

なぜ1ベースにしたいのですか? VB.Netの配列では、0ベースのインデックスも使用されていました。

関連する問題