2017-01-09 1 views
-4

ist das möglich?Implizite und explizite Besetzung

string wellFormattedGuidAsString = ...; 
Guid guid = wellFormattedGuidAsString; 

... 
Method(wellFormattedGuidAsString); 
void Method(Guid id) { ... } 

Ich versuchte mit expliziten und impliziten Cast.

public static implicit operator Guid(string str) 
{ 
    Guid guid; 
    Guid.TryParse(str, out guid); 
    return guid; 
} 
+1

Und was passiert, wenn man versucht, es? –

+0

Sie haben versucht und .... was ist passiert? –

+2

Sie können Operatoren für vorhandene .net-Typen nicht überladen, Sie könnten eine Erweiterungsmethode bereitstellen, die 'string' in' Guid' konvertiert. –

Antwort

0

Sie können keine impliziten und expliziten Operatoren außerhalb des gewünschten Objekts erstellen.

Was können Sie tun, stattdessen ist:

public static class StringEx 
{ 
    public static Guid ToGuid(this string str) 
    { 
     Guid guid; 
     Guid.TryParse(str, out guid); 
     return guid; 
    } 
} 

Und später Sie es mögen können:

string mestring = " ... "; 
Guid guid = mestring.ToGuid(); 

EDIT:

Eine andere Möglichkeit gibt es (natürlich gibt es) Das ist ein bisschen nutzlos, aber ich poste es hier:

eine Klasse machen, die string

public class StringWrapper 
{ 
    string _string; 

    public StringWrapper(string str) 
    { 
     _string = str; 
    } 

    public static implicit StringWrapper operator(string str) 
    { 
     return new StringWrapper(str); 
    } 

    public static implicit string operator(StringWrapper strWrapper) 
    { 
     return strWrapper._string; 
    } 

    public static implicit Guid operator(StringWrapper strWrapper) 
    { 
     Guid guid; 
     Guid.TryParse(str, out guid); 
     return guid; 
    } 

    public static implicit StringWrapper operator(Guid guid) 
    { 
     return guid.ToString(); 
    } 
} 

Und diese nutzlose Klasse Lassen Sie uns wickeln werden Sie so etwas tun:

string str = ".."; 
Guid guid = (StringWrapper)str; 
-1

einfach Ihre Methode überlasten:

void Method(Guid id) { ... } 
void Method(string guid) { 
    Guid _guid; 
    Guid.TryParse(guid, out _guid); 
    Method(_guid); 
} 
Verwandte Themen