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

时间:2014-01-27 17:53:16

标签: c# .net system.net

请考虑以下代码:

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干扰应该是一个不相关的类?

2 个答案:

答案 0 :(得分:2)

Version10Version11HttpVersion个静态字段返回System.Version个对象,而不是HttpVersion个对象。所以它在技术上并不相关。

现在,为什么它这样做,我完全不知道。但您会注意到使用它的地方(例如HttpWebRequest.ProtocolVersion)也会使用System.Version。这就是你想要使用的东西。

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

答案 1 :(得分:1)

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