webForumDet fria alternativet

Ärva från list och lägga till sort metod

.NET

5 svar · 471 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Hej

Jag tänkte försöka underlätta lite för mig när jag programmerar. Sorterar ofta listor och istället för att skriva så här:

        adUsers.Sort(delegate(ADUser p1, ADUser p2) { return p1.DisplayName.CompareTo(p2.DisplayName); });

Så tänkte jag bygga en egen method för det. men jag har inte fått den att sortera rätt.

[Serializable]
[DebuggerDisplay("Count = {Count}")]
public class GenericCollection<GENERICTYPE> : List<GENERICTYPE>
{
public void Sort(string sortExpression)
    {
        this.Sort(delegate(GENERICTYPE p1, GENERICTYPE p2) { return p1.GetType().GetProperty(sortExpression).GetValue(this[], null).ToString().CompareTo(p1.GetType().GetProperty(sortExpression).GetValue(this[0], null).ToString()); });
    }
}
Medlem sedan aug. 20003 575 inlägg
#2

DynamicComparer:
http://www.codeproject.com/KB/dotnet/dynamiclistsorting.aspx

Ärv av Collection<> istället för List<>.

public class EntityRepository<TEntity> : Collection<TEntity>
{
    public SortByPropertyName(string propertyName)
    {
        DynamicComparer comparer = new DynamicComparer<TEntity>(propertyName);
        (this.InnerList as List<TEntity>).Sort(comparer);
    }
}

OBS skrev koden rakt av, finns säkert något kompileringsfel.

Medlem sedan jan. 20013 406 inlägg
#3

Varför ska jag ärva från Collection? Då finns ju inte metoderna för sort med?

Medlem sedan jan. 20013 406 inlägg
#4
 public void Sort(string sortExpression)
    {
        DynamicComparer.DynamicComparer<GENERICTYPE> comparer = new DynamicComparer.DynamicComparer<GENERICTYPE>(sortExpression);
        this.Sort(comparer.Compare);
    }
Medlem sedan aug. 20003 575 inlägg
#5

Addeladde skrev:

Varför ska jag ärva från Collection? Då finns ju inte metoderna för sort med?

Ärver du av collection får du möjligheterna att ta override på InserItem, RemoveItem och SetItem. Samt att kör man code analysis så rekommenderar den att man skall ärva av Collection<> istället.

Collection i sin tur innehåller en InnerList som är en List<> som man tar sort på.
Så som jag gjorde så castade jag den i detta fallet.

Medlem sedan jan. 20013 406 inlägg
#6

okej tack

248 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)