webForumDet fria alternativet

generics.

8 svar · 913 visningar · startad av natas

natasMedlem sedan juli 200568 inlägg
#1

Hej.
Hur använder man generics?.

Jag vill fylla 2 object med 1 metod:

List<Customers> Custy=new List<Customer>();
List<Order> Ordersy=new List<Order>();

Fill(Custy);
Fill(Ordersy);

detta var lite pseudokod. Är detta möjligt?.

GladhMedlem sedan maj 20012 812 inlägg
#2

natas skrev:

Är detta möjligt?.

Visst är det det...

Här kommer ett litet förslag

public void Fill<ItemType>(ItemType item){....}

Här tar jag emot ett objekt av någon typ och opererar på det:
För att anropa metoden skriver man:

Fill<Custy>(mycusty);

- M

AddeladdeMedlem sedan jan. 20013 406 inlägg
#3

Kan man enkelt sortera en genericCollection?

GladhMedlem sedan maj 20012 812 inlägg
#4

Det är inga problem, för det är inte själv collection/listan som sköter sorteringen utan objekten själv, tror att de skall implementare ICompareble eller ICompare så kommer collection/list använda sig av den metoden när du vill sortera en lista med ditt objekt.

- M

erkaMedlem sedan dec. 19996 522 inlägg
#5

En List har ju .Sort som du kan köra en comparasion på tex. använd delegates för snygg kod, typ

myColl.Sort(delegate(minKlass p1,minKlass p2) { return p1.MySortProp.CompareTo(p2.MySortProp); });

AddeladdeMedlem sedan jan. 20013 406 inlägg
#6

Jag kör på en class för GenericCollections

	public class GenericCollection<GENERICTYPE> : CollectionBase
	{
		public void Add(GENERICTYPE GenericObject)
		{
			InnerList.Add(GenericObject);
		}
		public void Add(GenericCollection<GENERICTYPE> GenericColl)
		{
			foreach (GENERICTYPE GenericObject in GenericColl)
				InnerList.Add(GenericObject);
		}

		public void Remove(int index)
		{
			InnerList.RemoveAt(index);
		}
		public bool Contains(GENERICTYPE GenericObject)
		{
			return InnerList.Contains(GenericObject);
		}
		public GENERICTYPE this[int indexer]
		{
			get
			{
				//Check if the indexer falls in allowable range.
				if ((indexer >= 0) &&
					   (indexer < InnerList.Count))
					return (GENERICTYPE)InnerList[indexer];
				else
					throw new System.IndexOutOfRangeException("Index must be between 0 and " + InnerList.Count.ToString() + ".");
			}
		}

	}
GladhMedlem sedan maj 20012 812 inlägg
#7

Då lägger du till en metod i din klass som heter sort.

I denna method så får du själv hantera sorteringen av dina objekt. om du ser till så att alla dina objekt implementerar ICompare (eller vad interfacet nu heter) så kan du använda det för att sorterar dina objekt.

Mitt tips till dig är istället lägga det i en List<> och erka's kod, och sedan returnerar denna lista antingne som en lista eller omgjord till en collectionbase.

Själv har jag gjort något liknande men jag utgick ifrån List<> istället för collectionbase, då jag tycker den har mer basfunktionallitet som man bara kan använda rakt av...

- M

AddeladdeMedlem sedan jan. 20013 406 inlägg
#8

Okej tack Gladh ska kika mer på det.

AddeladdeMedlem sedan jan. 20013 406 inlägg
#9

För er som är intresserade av en sort funktion till generic collections kika på denna länk. Fungerar väldigt smutt.

http://kylefinley.net/archive/2006/02/08/41.aspx

133 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)