Dizisi

2010-04-22 21 views
11

Eğer C#Dizisi

array['Name']; 

do

yerine Can:

array[0]; 

Sana o yapabileceğini biliyorum PHP, ancak C# için bir eşitlik var, ancak imkansız düşünme imkansız :(

cevap

16

buna C# Dictionary denir . Jenerik kullanarak herhangi bir türe göre indisleyebilirsiniz. Öyleyse:

Dictionary<Person, string> dictionary = new Dictionary<Person, string>(); 
Person myPerson = new Person(); 
dictionary[myPerson] = "Some String"; 
... 
string someString = dictionary[myPerson]; 
Console.WriteLine(someString); 

Bu, açıkça, konsola "Bazı Dize" yazdırır.

Bu, sözlüğün esnekliğine bir örnektir. İstediğiniz gibi bir dizgi de dizini olarak yapabilirsiniz. Bu karşı sormak

class MyClass 
{ 
    public string this[string key] 
    { 
     get { return GetValue(key); } 
     set { SetValue(key, value); } 
    } 
} 

Sonra tabloların tipini yazabilirsiniz:

+0

Yeap, 'System.Collections' http://msdn.microsoft.com/en-us/library/system.collections.aspx – xandercoded

+2

@ xandercoded 'e bakın, muhtemelen' System.Collections.Generic 'olmasını istersiniz. 'System.Collections', .net 1. 'den jenerik olmayan bir formdur. – Kobi

+0

Teşekkür ederiz ........: D –

2
Dictionary<string, whatyouwanttostorehere> myDic = 
          new Dictionary<string, whatyouwanttostorehere>(); 
myDic.Add("Name", instanceOfWhatIWantToStore); 
myDic["Name"]; 
+0

ty ... Güzel .... –

+1

bu ne demek istemediğimi, göstermedim tamamen ilk kez. –

6

Diziler C# böyle çalışmaz, ancak herhangi bir sınıfa bir dizin özelliği ekleyebilir

MyClass c = new MyClass(); 
c["Name"] = "Bob"; 

Dictionary<TKey, TValue>, NameValueCollection ve benzeri sınıflara dize tabanlı dizinli erişim nasıl uygulanır. Aynı zamanda, birden fazla dizinleyici de uygulayabilirsiniz, örneğin, dizin için bir ve ad için bir tane, sadece farklı bir parametre türü ile yukarıdaki gibi başka bir özellik ekleyin.

  • SortedList<TKey, TValue>
  • Dictionary<TKey, TValue>
  • SortedDictionary<TKey, TValue>
  • NameValueCollection
  • Lookup<TKey, TValue>
( System.Linq cinsinden):

Çeşitli dahili çerçeve sınıfları zaten dahil olmak üzere bu dizinleyiciler var

... ve daha fazlası. Bunların hepsi biraz farklı amaçlar için tasarlanmıştır, bu yüzden her birini okumak ve gereksiniminize uygun olanı görmek isteyeceksiniz.

+0

Teşekkürler, laters için awsome cevap ....: D –