为什么 Console.Writeline 直接在扩展方法中工作,但使用 return 却不行
Why does Console.Writeline directly work in an extension method but using return doesn't
我正在尝试扩展 C# List 以使用 Print 函数。使用 Console.WriteLine(a.Print()) 仅显示部分输出,但 a.Print2() 在 a.Print 中可以正常工作,我正在调用具有 return 类型的方法string 和 a.Print2 我正在调用一个函数 return 值为 void.
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;
}
但是请注意,连接字符串有更好的可能性。一种解决方案可能是:
static public string Print(this List<int> input)
{
return string.Join(", ", input);
}
我正在尝试扩展 C# List 以使用 Print 函数。使用 Console.WriteLine(a.Print()) 仅显示部分输出,但 a.Print2() 在 a.Print 中可以正常工作,我正在调用具有 return 类型的方法string 和 a.Print2 我正在调用一个函数 return 值为 void.
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;
}
但是请注意,连接字符串有更好的可能性。一种解决方案可能是:
static public string Print(this List<int> input)
{
return string.Join(", ", input);
}