webForumDet fria alternativet

generics.

.NET

8 svar · 915 visningar · startad av natas

Medlem sedan juli 200568 inlägg
Frågan#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?.

Medlem 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

Medlem sedan jan. 20013 406 inlägg
#3

Kan man enkelt sortera en genericCollection?

Medlem 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

Medlem 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); });

Medlem 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() + ".");
			}
		}

	}
Medlem 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

Medlem sedan jan. 20013 406 inlägg
#8

Okej tack Gladh ska kika mer på det.

Medlem 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

268 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)