隐式和显式演员

时间:2017-01-09 15:16:37

标签: c#

这可能吗?

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;
}

2 个答案:

答案 0 :(得分: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 :(得分:-1)

只是重载你的方法:

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