dotnet-snippets.de
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1315 | Anzahl registrierter User: 1268 | Besucher online: 10
Hauptmenü
Home
Snippet Wettbewerb
Top Ten
Zufälliger Snippet
Vista Gadget
T-Shirts für Geeks
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social
Facebook
Twitter
RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss Delphi.NET
Rss ASP.NET
Werbung
Alice DSL Flatrate

Partner
Partner von Codezone.de


Member of Microsoft Community Leader/Insider Program (CLIP)

Der * Operator mal anders...


Autor: Marcel Kloubert
Sprache: C#
Bewertung:
noch nicht bewertet

Anzahl der Aufrufe: 1034
  

Beschreibung:

Dieses Beispiel implementiert den *-Operator auf ein klonbares Objekt.

Ein Code nach dem Muster


MyCloneableObject myObj = new MyCloneableObject();

IEnumerable list = myObj * 5979;


würde eine Liste mit 5979 geklonten Instanzen von myObj zurückgeben, die man bspw. mit der LINQ-Extension ToArray() in ein Array umwandeln kann.

Eine umgekehrte Verwendung wie


MyCloneableObject myObj = new MyCloneableObject();

IEnumerable list = 5979 * myObj;


ist ebenfalls möglich.


Abgelegt unter: System, ICloneable, klonbar, klonen, *, operator.



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
using System;
using System.Collections.Generic;

namespace MarcelJKloubert
{
    public class MyCloneableObject : ICloneable
    {
        #region Methoden
        /// <summary>
        /// 
        /// </summary>
        /// <see cref="System.ICloneable.Clone()"/>
        public object Clone()
        {
            // hier kommt der Code zum klonen des Objektes rein...
        }
        #endregion

        #region Operatoren
        /// <summary>
        /// Erstellt eine gewisse Anzahl von geklonten Objekten.
        /// </summary>
        /// <param name="obj">Objekt, das geklont werden soll.</param>
        /// <param name="count">Anzahl der geklonten Objekte.</param>
        /// <returns>Liste mit geklonten Objekten.</returns>
        /// <exception cref="">Wird geworfen, wenn die Anzahl kleiner als 0 ist.</exception>
        public static IEnumerable<MyCloneableObject> operator *(MyCloneableObject obj, int count)
        {
            if (count < 0)
            {
                throw new ArgumentOutOfRangeException("count");
            }

            for (int i = 0; i < count; i++)
            {
                MyCloneableObject item = obj is MyCloneableObject ?
                                         (MyCloneableObject)obj.Clone() : null;

                yield return item;
            }
        }

        /// <summary>
        /// Erstellt eine gewisse Anzahl von geklonten Objekten.
        /// </summary>
        /// <param name="count">Anzahl der geklonten Objekte.</param>
        /// <param name="obj">Objekt, das geklont werden soll.</param>
        /// <returns>Liste mit geklonten Objekten.</returns>
        /// <exception cref="">Wird geworfen, wenn die Anzahl kleiner als 0 ist.</exception>
        public static IEnumerable<MyCloneableObject> operator *(int count, MyCloneableObject obj)
        {
            return obj * count;
        }
        #endregion
    }
}
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:  24.01.2010 20:14:51

Hmm ganz ehrlich gefällt mir das nicht. Ist irgendwie nicht intuitiv für diesen Operator. Da würde ich eher eine Methode machen wo ich die Anzahl der Klone angebe und diese dann eine IEnumerabel zurück gibt.


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.