为什么Console.Writeline直接扩展方法工作,但使用的回报不
问题描述:
我试图延长C#列表使用打印功能。使用Console.WriteLine(a.Print())只显示部分输出,但a.Print2()正常工作,其中在a.Print我打电话返回类型为字符串,并以a.Print2我打电话用的功能的方法返回值void。为什么Console.Writeline直接扩展方法工作,但使用的回报不
using System;
using ExtensionMethods;
using System.Collections.Generic;
namespace ExtensionMethods
{
public static class ExtensionClass
{
public static int PlusFive(this int input)
{
return input + 5;
}
static public string Print(this List<int> input)
{
int i;
string output = "";
for (i = 0; i < input.Count - 1; i++)
{
output = input[i].ToString() + ", ";
}
output += input[i].ToString();
return output;
// Outputs 2, 3
}
static public void Print2(this List<int> input)
{
int i;
for (i = 0; i < input.Count - 1; i++)
{
Console.Write(input[i].ToString() + ", ");
}
Console.Write(input[i].ToString());
// Outputs 1, 2 ,3
}
}
}
namespace LearningCSharp
{
class Program
{
static void Main(string[] args)
{
List<int> a = new List<int>(){1, 2, 3};
// int b = 2;
Console.WriteLine(a.Print());
a.Print2();
}
}
}
答
因为您的Print()
方法已损坏。在循环中,您总是设置output
一个新的字符串。然而
static public string Print(this List<int> input)
{
int i;
string output = "";
for (i = 0; i < input.Count - 1; i++)
{
// missing plus here
output += input[i].ToString() + ", ";
}
return output;
}
注意,有更好的possibilites到Concat的字符串:你缺少的加分。一个解决方案可能是这样的:
static public string Print(this List<int> input)
{
return string.Join(", ", input);
}
+2
雷内是对的。我建议也花一些时间在调试器中。设置一些断点和检查在调试器输出的值可能会导致你的回答非常迅速,而无需问在计算器上。本次论坛是一个很好的资源 - 特别是对于困难的问题 - 但不能代替良好的老式调试,测试和文档的阅读 –
我甚至不知道static public void是合法的语法,直到我读到这个。 –
当你调试也并非表现出你和你的打印方法确切的问题(在循环覆盖输出)?我的意思是,我在此之前假设你看过你的方法中输出变量是如何构造的?我的意思是,如果不先进行基本的调试,你不会问这个问题吗? – Chris
@Chris你为什么不呢? – Servy