Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1562 | Anzahl registrierter User: 1893 | Besucher online: 115
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Diverse Erweiterungsmethoden


Autor: Curry
Sprache: C#
Bewertung:
1.44 (2 votes)
Anzahl der Aufrufe: 2122
  
Kick it on dotnet-kicks.de  

Beschreibung:

Ich stelle euch hiermit mal ein paar meiner Erweiterungsmethoden zur Verfügung.

Abgelegt unter: erweiterungsmethoden, extensions.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System.Collections;
using System.Collections.Generic;
using System.Reflection;

namespace Tools
{
    /// <summary>
    /// Stellt eine Reihe von Erweiterungsmethoden zur
    /// Verfügung.
    /// </summary>
    public static class Extensions
    {
        /// <summary>
        /// Kopiert die Eigenschaften eines Objektes
        /// auf ein anderes.
        /// </summary>
        public static T CopyProperties<T>(this T source, T dest)
        {
            foreach (PropertyInfo prop in typeof(T).GetProperties())
            {
                if (prop.CanRead && prop.CanWrite)
                {
                    prop.SetValue(dest, prop.GetValue(source, null), null);
                }
            }

            return dest;
        }

        /// <summary>
        /// Kopiert eine Liste.
        /// </summary>
        public static IEnumerable<T> CopyList<T>(this IEnumerable source)
        {
            List<T> retVal = new List<T>();

            foreach (object obj in source)
            {
                try
                {
                    retVal.Add((T)obj);
                }
                catch { };
            }

            return retVal;
        }

        /// <summary>
        /// Gibt den Index eines Elements zurück.
        /// </summary>
        public static int GetIndexOf<T>(this IEnumerable<T> source, T item)
        {
            int counter = 0;
            foreach (T obj in source)
            {
                if ((object)obj == (object)item)
                    return counter;

                counter++;
            }

            return -1;
        }

        /// <summary>
        /// Zählt die Vorkommnisse eines Objekts in einer Aufzählung.
        /// </summary>
        public static int CountContains<T>(this IEnumerable<T> source, T item)
        {
            int retVal = 0;

            foreach (T obj in source)
            {
                if (obj.Equals(item))
                    retVal++;
            }

            return retVal;
        }
    }
}

Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Christopher Kk schrieb am:  04.04.2011 11:32:32

Hmm also die Methode GetIndexOf find ich nich so gut, nicht umsonst implementiert nur die IList den Indexer, weil IEnumerable halt einfach nur eine Aufzählung ist und wenn man einen Index braucht ist IEnumerable eh die falsche Wahl.

CountContains ist nett, aber dafür gibt es die Extensionmethod Count, der man ein Predicate mitgeben kann.

Die Funktion CopyProperties, macht aber nur ne Flache Kopie, das ist gewollt?

Die Funktion CopyList ist sehr gefährlich. Da einfach die CastException zu schlucken halte ich für sehr unsauberen Stil. Für sowas gibts doch bereits .Cast<T>. Oder aber, du machst deinen Extension Parameter auch T-Generisch. Ansonsten würde ich die Funktion nicht benutzen.
hackman schrieb am:  04.04.2011 20:32:31

naja ist nicht so dolle programmiert

zu CopyProperties,
besser mal schaun ob die getvalue und setvalue funktionen auch wirklich zurückgeliefert werden,

was ist der unterschied zwischen CopyList und ToList, ToArray etc?
warum erstellt die funktion eine liste, wenn ein array reichen würde? das braucht im schlimmsten fall nur etwa doppelt so viel speicher ...
und alle exceptions einfach mal ignorieren, naja ...

indexof, wie wärs mit der richtigen .Equal methode?
oder richtig mit IEqualityComparer implementieren


für ein .Count(t => t == item) braucht man nicht wirklich ne extra funktion?


Diese Snippets könnten für Sie interessant sein:

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.