2011-08-17 13 views
15

"Kalın bir gün" yaşadığımı bilmiyorum - ama burada en iyi yolun ne olduğunu merak ettim..NET'te çiftleri depolamanın, nesneyi oluşturmanın veya bir sınıfı kullanmanın en iyi yolu nedir?

Bağlam:

Ben alanların bir listesi var ve ben (ben BTW .NET 2.0 kullanıyorum) mesela onlarla takma isimlerini saklamak istediğiniz

enter image description here

Yani dizeleri onun aslında bir çifti:

REFERANS, Ref

TOPLULUK, Topluluk

POST_CODE, Posta Kodu

... ve sanırım öyle görünüyor Böyle şeyler için nesneler oluşturmaya devam etmek için her zaman overwr, bu yüzden StringDictionary sınıfının herhangi bir işlevini kullanmasam ve bir anahtar değeri hakkında rahatsız değilim bile bir StringDictionary oluşturmalı ve değerleri bu şekilde saklamalıyım Çift dernek vb - Ben sadece bir çift dizeleri tutmak istiyorum.

Herhangi bir yardım/işaretçiler harika olurdu.

cevap

6

"Alan Adlarınız" benzersiz ise jenerik Dictionary<string, string> kullanabilirsiniz.

Yinelenen anahtarlara aldırmazsanız, Lookup sınıfını kullanabilirsiniz.

Bu sınıfların tüm işlevlerini kullanıp kullanmadığın konusunda çok fazla endişelenmem. Bence daha önemli olan, & bakım kodunun okunması kolay, basit yazmaktır.

5

Tuple<string,string> nedir? .net 4.0 içine inşa edilmiştir ve hafiftir.

+0

de bakabilirsiniz lütfen unutmayınız kaçınmak istiyorsanız, yinelenen anahtarlarla unutmayın. – Jayee

31

.NET için "eş" genel sınıfı Tuple'dur. Bunu ister kullanırsınız: en soldaki dize (yani bir tuş) benzersiz olup olmadığını

var strings=new List<Tuple<string, string>>(); 
strings.Add(Tuple.Create("REFERENCE", "Ref")); 

bir sözlük mükemmel kabul edilebilir bir alternatiftir. Aksi halde hatalar alacaksınız.

Yerleşik koleksiyonları kullanmanın veya gerçek bir nesne oluşturmanın daha iyi olup olmadığına gelince, gereksinimlerinize bağlıdır (daha sonra daha fazla sütun ekliyor musunuz? Bunu sözlük yaklaşımı ile yapamazsınız), ne sıklıkta Bunu kullanırsanız (çekirdek bir çekirdekse, bunun için bir etki alanı modeli yapmalısınız) vb.

Düzeltme: Herhangi bir sözlük yerleşik işlevselliği kullanmadığı için, bu doğru değil: yıldırım hızlı aramalar için ikili arama algoritması ve dahili ağaç yapısı. Tuple ya da kendi türünüzün bir listesi muhtemelen buna sahip olmayacak ve doğrusal bir aramaya dönecektir.ek çizgiler var - System.Collections.Generic.Dictionary ve System.Collections.Specialized.NameValueCollection içlerine dizeleri ekleme yöntemini Add gerektirir:

3

kullanmak için, çünkü, iki dizeyi depolamak için özel bir yapıya kullanmak daha iyidir kodun System.Tuple sınıfı yalnızca ReadOnly özelliklerine sahiptir - bu bir engel olabilir.

basit bir yapı örneği:

public struct DoppelWert 
{ 
public string Wert1; 
public string Wert2; 
} 
+1

İyi bir çözüm ve saha isimlerini seviyorum – CindyH