2017-01-09 28 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(); 

はEDIT:

(もちろんそこにある別の方法があります)これは少し役に立たないですが、私はここに投稿します:

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); 
} 
関連する問題