2016-11-20 143 views
1

我在允许使用我自己的代码扩展其功能的应用程序中使用它。不能隐式地将类型void转换为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); 
    } 
    } 
} 
+1

无效手段“这种方法有什么返回'而是你有一个方法需要返回一个字符串。 – Steve

+0

谢谢,史蒂夫。它现在有效。 – salep

回答

3

您需要将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 
    } 
} 

它也被认为好的做法来包装使用一次性对象的代码(在这种情况下,HttpWebResponse类型,StreamStreamReader的对象)与using块。

我还冒昧使用var而不是明确写出变量的类型,因为类型在声明的右边已经很明显。

+0

它令人惊叹。谢谢你,因为你是第一个回答,我会在8分钟内接受你的回答。 – salep

+1

我很高兴它的工作原理!我还修改了代码以使用'使用'块来正确处理respose,stream和stream reader。 –

2

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

1

问题是,您不是返回什么从您的功能。它重写到这一点,它的工作:

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

感谢您的回答和附加信息,我试图理解它。它现在起作用了,我必须接受BotondBalázs的回答(他是第一位),但我赞成你的回答。 再次感谢您的时间和耐心! – salep

相关问题