Jag vill skapa en klass "Pair" med medlems variablerna "first" och "second". Sedan vill jag skapa en array med Pair object där jag kan sortera efter "second". Och jag vill kunna konvertera till en string[] som innehålle bara värden från "first".
Så här långt har jag kommit:
public class Pair : IComparable
{
private object first;
private object second;
public Pair(object first, object second)
{
this.first = first;
this.second = second;
}
public object Second
{
get
{
return second;
}
set
{
second = value;
}
}
public object First
{
get
{
return first;
}
set
{
first = value;
}
}
public static explicit operator string(Pair p)
{
return p.first.ToString();
}
/*
public override string ToString()
{
return first.ToString();
}
*/
public int CompareTo(object obj)
{
Pair p = (Pair) obj;
return ((IComparable)this.second).CompareTo((IComparable)p.second);
}
}
Detta funkar då så klart inte:
ArrayList result = new ArrayList();
result.Add(new Pair("olle", 3));
result.Add(new Pair("nisse", 4));
result.Sort(); //funkar fint!
string[] members = (string[]) result.ToArray(typeof(string)); //blir galet
Jag får exception: "Additional information: At least one element in the source array could not be cast down to the destination array type."
Så till frågan: hur gör jag för att på ett snyggt sätt konvertera en lista med Pair object till en string[] med bara värden från first??
Självklart kan man göra det på det fula sättet med en loop men det vill jag hellst undvika.
string[] str = new string[result.Count];
Pair tmpPair;
for (int i=0;i<result.Count;i++){
tmpPair = (Pair)result[i];
str[i] = (string)tmpPair.First;
}
Vet inte riktigt hur du kan casta över direkt från din arraylist till strängvektorn utan att använda dig av ett temporärt objekt av typen Pair men det borde ju gå!
tja, nu blev det på två rader :). ivf så blir där en loop även om det skulle skrivas på en rad. Bar för att det inte skrivs i koden så betyder det ju inte att det utförs!
261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2