Welcome to the Treehouse Community
The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Daniel Tkach
7,608 PointsWhy not skip the MemoryReader and the rest and return right away the byte[]?
I wonder why not convert the byte[] to string and return that, or just return the byte[].
What are we achieving by amassing the bytes with these lines:
using(var stream = new MemoryStream(googleHome))
using(var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
We put the bytes[] into a MemoryStream so that then we get this stream and put it in the reader to then return what, a string from the ReadToEnd() method. All this does not make any sense for me lol
3 Answers

James Churchill
Treehouse TeacherDaniel,
Thanks for your question!
I believe that Carling is converting the byte array to a string in order to output the web page's HTML to the console. If you pass the byte array directly to the Console.WriteLine
method, you get System.Byte[]
as the output.
But you are correct in that you can convert the byte array to a string without using the stream/reader combo. In fact, there are many ways in .NET to do this; here's just one example:
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadData("https://www.google.com");
string stringData = System.Text.Encoding.Default.GetString(data);
Console.WriteLine(stringData);
However, one advantage to using Carling's approach is that we don't need to know the encoding of the string data in order to do the conversion. That may or may not impact your results, so your mileage might vary.
Thanks ~James

David Lin
35,864 PointsA more direct alternative to get a string as the response is to use WebClient's DownloadString method.
public static string GetStringResponse(string url)
{
string response = "";
using(var webClient = new WebClient())
{
response = webClient.DownloadString(url);
}
return response;
}

Daniel Tkach
7,608 PointsWow thanks for letting me know. Yeah I think I saw the first one planned for next month. This eases my anxiety a bit ha!
Daniel Tkach
7,608 PointsDaniel Tkach
7,608 PointsAmazing James, thank you so much for the explanation. I'm about to finish the C# track and I'm looking forward to starting your lessons! Please do more, ASP is what interests me the most at the moment. See you around.
James Churchill
Treehouse TeacherJames Churchill
Treehouse TeacherThanks Daniel! I'm working on a new ASP.NET MVC related course now... "Using Entity Framework with ASP.NET MVC" and will then move on to courses on Web API and Identity. So, lots of great content coming in the coming months.