【问题标题】:Cannot implicitly convert type 'System.Version' to 'System.Net.HttpVersion'无法将类型“System.Version”隐式转换为“System.Net.HttpVersion”
【发布时间】:2014-01-27 17:53:16
【问题描述】:

考虑以下代码:

void Main()
{
    HttpVersion version;
    string s = "HTTP/1.1";
    version = s == "HTTP/1.1" ? HttpVersion.Version11 : HttpVersion.Version10;
}

这会引发错误

无法将类型“System.Version”隐式转换为“System.Net.HttpVersion”

尽管System.Version 无处可推断,甚至不是HttpVersion's inheritance 的一部分。

显式转换

void Main()
{
    HttpVersion version;
    string s = "HTTP/1.1";
    version = s == "HTTP/1.1" ? (HttpVersion) HttpVersion.Version11 : (HttpVersion) HttpVersion.Version10;
}

或显式命名空间命名

void Main()
{
    System.Net.HttpVersion version;
    string s = "HTTP/1.1";
    version = s == "HTTP/1.1" ? System.Net.HttpVersion.Version11 : System.Net.HttpVersion.Version10;
}

不要有所作为。

问题很简单:为什么System.Version 会干扰应该是不相关的类?

【问题讨论】:

    标签: c# .net system.net


    【解决方案1】:

    HttpVersionVersion10Version11 静态字段返回 System.Version 对象,而不是 HttpVersion 对象。所以这在技术上并非无关。

    至于为什么会这样,我完全不知道。但是你会注意到使用它的地方(例如HttpWebRequest.ProtocolVersion)也使用System.Version。所以这就是你想要使用的。

    对我来说,它看起来有点像 HttpVersion 应该是一个静态类,因为它没有不是从 Object 继承的实例成员...

    【讨论】:

    • 嗯,我已经读完了。这是定义这些值的一种非常尴尬的方式。我猜这是因为 C# 中对枚举的限制(枚举上没有方法或继承),他们像这样解决它。感谢您指出!
    【解决方案2】:

    HttpVersion.Version11HttpVersion.Version10 都返回一个 Version 对象,您试图将其存储在一个 HttpVersion 变量中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 2022-01-15
      • 2016-07-31
      • 2011-12-31
      相关资源
      最近更新 更多