Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 隐式和显式转换_C# - Fatal编程技术网

C# 隐式和显式转换

C# 隐式和显式转换,c#,C#,这可能吗 string wellFormattedGuidAsString = ...; Guid guid = wellFormattedGuidAsString; ... Method(wellFormattedGuidAsString ); void Method(Guid id) { ... } 我试着用显式和隐式的演员阵容 public static implicit operator Guid(string str) { Guid guid; Guid.Try

这可能吗

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

不能在所需对象之外创建隐式和显式运算符

你可以做的是:

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();
编辑:

还有另一种方法(当然有)有点无用,但我会在这里发布:

创建一个将包装
字符串的类

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;

只需重载您的方法:

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

当你尝试的时候发生了什么?你尝试了。。。。发生了什么?您不能为现有的.net类型重载运算符,您可以提供一个扩展方法,将
string
转换为
Guid
。显式/隐式关键字声明一个用户定义的类型转换运算符。我知道我可以为此创建扩展方法,但我确实希望这样做Guid=guidString。