2017-01-09 2 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); 
} 
관련 문제