繁体   English   中英

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

[英]cannot implicitly convert type void to object error in C#

我在允许我使用自己的代码扩展其功能的应用程序中使用此功能。

它已经用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's价值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);
    }
  }  
}

您需要将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而不是显式地写出变量的类型,因为在声明的右侧,这些类型已经很明显了。

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

问题是您没有从函数中返回任何东西。 将其重写为此,它将起作用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM