C#中的错误:无法将void类型隐式转换为object类型

6

我正在一个可以使用自己的代码扩展其功能的应用程序中使用它。

它是用 C# 编写的。

Result() 将返回从我的 Node.js 服务器获得的答案 (FinalResponse),我将像下面这样在应用程序中访问它,但是当我尝试使用 EchoOut() 时,会出现标题中的错误。

var returnedValue = Lib.Result();
App.EchoOut(returnedValue); // EchoOut allows you to test the function you wrote, it echoes string on the screen, but in this case, it gives an error.

错误

cannot implicitly convert type void to object 

当我单独测试Lib.Result()时,我看到应用程序正在发出请求,但我无法将返回的值分配给变量。

如何将FinalResponse的值分配给returnedValue变量?

我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace MainNameSpace
{
  public class Lib
  {
    public void Result()
    {
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("192.168.1.101:8000/mytest");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    StreamReader stream = new StreamReader(response.GetResponseStream());
    string FinalResponse = stream.ReadToEnd();
    Console.WriteLine(FinalResponse);
    }
  }  
}

1
void 表示“此方法没有返回值”,而你需要一个返回字符串的方法。 - Steve
谢谢,史蒂夫。现在它可以工作了。 - salep
3个回答

4

您需要更改Result方法的返回类型为string,并返回FinalResponse而不是将其写入控制台。

public string Result() // <-- "string" instead of "void"
{
    var request = (HttpWebRequest)WebRequest.Create("192.168.1.101:8000/mytest");

    using (var response = (HttpWebResponse)request.GetResponse())
    using (var stream = response.GetResponseStream())
    using (var reader = new StreamReader(stream))
    {
        return reader.ReadToEnd(); // <-- return the result
    }
}

使用一次性对象(在本例中,类型为HttpWebResponseStreamStreamReader的对象)用using块包装代码也被认为是良好的实践。

我还自行使用了var,而不是明确编写变量类型,因为类型已经从声明的右侧显而易见。


它运行得非常好。谢谢你,鉴于你是第一个回答的人,我将在8分钟内接受你的答案。 - salep
1
很高兴它能正常工作!我还修改了代码,使用using块来正确释放响应、流和流读取器。 - Botond Balázs

3

您的方法Result()是void类型的。但是您正在尝试分配返回值。请更改返回类型并使用“return”。


2
问题在于你的函数没有返回任何内容。按照下面的方式重写它,就可以正常工作了:
public string Result()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("192.168.1.101:8000/mytest");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    StreamReader stream = new StreamReader(response.GetResponseStream());
    string FinalResponse = stream.ReadToEnd();
    //Console.WriteLine(FinalResponse);
    return FinalResponse;
}

此外,以下是如何使C#更符合惯用的大小写约定等方面的建议:
public string Result()
{
    var request = (HttpWebRequest)WebRequest.Create("192.168.1.101:8000/mytest");
    var response = request.GetResponse();
    var stream = new StreamReader(response.GetResponseStream());
    var finalResponse = stream.ReadToEnd();
    return finalResponse;
}

谢谢您的回答和额外提供的信息,我正在努力理解它。现在它可以工作了,我将接受Botond Balázs的答案(他是第一个回答的),但我也点赞了您的答案。 再次感谢您的时间和耐心! - salep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接