簡體   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