2017-01-09 181 views
-4

這是可能的嗎?隱式和顯式轉換

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

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

我試着用顯式和隱式轉換。

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

發生了什麼事,當你嘗試它? –

+0

你試過了......發生了什麼? –

+2

您不能爲現有.net類型重載運算符,您可以提供一個將'string'轉換爲'Guid'的擴展方法。 –

回答

0

您不能在所需對象之外創建隱式和顯式運算符。

你可以做的反而是:

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

而且以後你可以使用它像:

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

編輯:

還有另外一種方式(當然有)這是有點無用,但我會張貼在這裏:

做一個類,將包裹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(); 
    } 
} 

這沒用類咱們你做這樣的事情:

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

只是超載你的方法:

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