2009-02-26 11 views
1

0 tabanlı ise, 1 temelli yapmak için nasıl yer tutucu ekleyebiliriz? Teşekkür ederim.Koleksiyon (Of T) 0 tabanlı dizi veya 1 tabanlı dizi mi?

+2

Bunu düşünmek için * gerçekten iyi bir nedeniniz var. 0 tabanlı konteynerlerin dünyasında 1 tabanlı bir konteynere geçilmesi, gelecekte bu kodu sürdürmesi veya çalışması gereken programcıları karıştırması garantilidir. –

+0

Tamam, uyarınız için teşekkürler, başka bir yol bulacağım lol –

cevap

8

0-tabanlıdır. Bir geri dönüş sorusu: neden bunu 1 tabanlı yapmak istersiniz? Uzatma Yöntemlerle

sen (siz isteseydiniz) yapabilirdi:

<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 

sonra (hemen hemen her koleksiyonundan) kullanın:

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

Eski kod, 1 tabanlı koleksiyonu kullandığından, şimdi basitleştiriyorum, ancak 0 tabanlıysa, çok büyük bir sayı olacak ifadeler değiştirilmelidir. Yani ... –

+1

Adam: VB çeviri hizmeti için teşekkürler; –

2

0 tabanlıdır. 1 temelli yapmak istiyorsanız, neden bir indeksi kabul eden bir okuma yöntemi yapmıyorsunuz?

0

Sen 0 konumunda bir öğe eklemek için Insert(int index, T item) kullanabilirsiniz ama indeks aritmetiği yapmaktan ve 0 tabanlı bir koleksiyon olarak referans göstermekten daha iyi olacağını düşünüyorum. Bu, çoğu programcının bekleyeceğiniz şeyden sonra geliyor. @ Robert'in uzatma metodu fikrinin bir değeri var, ama sanırım kodunuzun nihai koruyucularını karıştırmaya son verecek.

0

Neden 1 tabanlı yapmak istersiniz? VB.Net dizileri de 0 tabanlı dizinler kullanmıştır.

İlgili konular