无法在C#中隐式转换类型void到对象错误

时间:2016-11-20 18:59:56

标签: c#

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

它已用C#编码。

O(n log(n))将返回从我的Node.js服务器(Result())获得的答案,我将在下面的应用程序中访问它,但是我收到错误我尝试使用EchoOut()时的标题。

FinalResponse

错误

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's变量?

我的代码

returnedValue

3 个答案:

答案 0 :(得分: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而不是明确地写出变量的类型,因为这些类型在声明的右侧已经很明显了。

答案 1 :(得分:3)

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

答案 2 :(得分: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;
}