【问题标题】:Implicit and explicit cast [duplicate]隐式和显式强制转换[重复]
【发布时间】:2017-01-09 15:16:37
【问题描述】:

这可能吗?

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

【问题讨论】:

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

标签: c#


【解决方案1】:

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

你可以做的是:

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;

【讨论】:

    【解决方案2】:

    只需重载你的方法:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多