2016-06-06 12 views
0

Ich muss schrittweise GUID erhöhen, die ich erfolgreich thisdefinieren Inkrementoperator für GUID

mit erreicht, aber jetzt möchte ich es durch den Inkrementoperator machen ++, weil ich meinen Code wollen ziemlich aussehen und kurz.

Mein Code:

public class GuidOps 
{ 
    public static Guid operator ++(Guid input) 
    { 
     return input.Increment(); //Increment works as intended here 
    } 
} 

Das funktioniert nicht, weil der Typ für den Operator ++ erforderlich muss der Typ der Klasse, wo der Operator deklariert wird.

enter image description here

Natürlich kann ich nicht Erklärung GUID außer Kraft setzen sich

Glauben Sie, dass es möglich ist, zu definieren ++ auf GUIDs?

+1

Warum müssen Sie die 'Guid' erhöhen? Was ist der Anwendungsfall dafür? – Sean

+1

Tun Sie das nicht ... es ist ein verwirrendes Verhalten und völlig unerwartet. Guids sind keine inkrementelle Art und überschreiben es ist jenseits von bizarr. Beachten Sie, dass ** pretty ** und ** concise ** nur im Kontext von ** lesbar ** und ** wartbar ** akzeptabel sind. –

Antwort

1

dies nicht möglich ist, zu tun Ursache GUID ist eine versiegelte Struktur

1

Da Guid versiegelt ist, besteht die einzige Möglichkeit, etwas auch nur annähernd in der Nähe zu tun, darin, einen Wrapper zu erstellen, der wiederum eine Guid-Eigenschaft auf dem Wrapper aktualisiert. Es kommt jedoch mit ein paar Disclaimer ...

  1. Dies ist schrecklich verwirrend und dumm. Tu es nicht. Nichts zu diesem Verhalten wird erwartet oder vernünftig. Dies führt zu Problemen mit der Wartbarkeit.
  2. Dies fügt den Incrementor-Operator noch nicht zur Guid-Definition selbst hinzu. Es fügt den Operator nur dem Wrapper hinzu. Jetzt haben wir die Abstraktion der Abstraktion hinzugefügt und nichts gelöst. Der Code ist weniger lesbar.

Das heißt, die folgenden werden Sie die Probleme der Bediener zumindest zwingende und darauf hinweisen, dass von dem Versuch zu machen Code zu klug entstehen erhalten schließen:

public class GuidWrapper 
{ 
    public Guid GuidInstance { get; set; } = Guid.NewGuid(); 

    public static GuidWrapper operator ++(GuidWrapper input) 
    { 
     input.GuidInstance = input.GuidInstance.Increment(); 
     return input; 
    } 
} 

var wrapper = new GuidWrapper(); 
var guid = wrapper.GuidInstance; 
var guid2 = wrapper++.GuidInstance;