初学者在这里:
我误解了重载函数的使用?
namespace Grades
{
class Program
{
private static object mike;
private static object gus;
private static object julio;
static void Main(string[] args)
{
object[] names = new object[3];
names[1] = mike;
names[0] = gus;
names[2] = julio;
WriteAnswer(" you're cool ", names );
}
static void WriteAnswer(string description, params object[] result)
{
Console.WriteLine(description + " " + result);
}
}
}
输出:
you're cool System.Object[]
我对输出的印象是:
you're cool gus mike julio
或者:
you're cool gus
you're cool mike
you're cool julio
答案 0 :(得分:3)
正如M12的答案所指出的那样,您永远不会为变量分配值,因此它们始终为null。显然,这必须首先解决。不过,要回答您的实际担忧:
我期望:在某些情况下,将数组传递给WriteLine会打印数组的内容
让我们对您的程序进行一些修改,然后讨论WriteLine
的工作方式。我们将创建一个字符串数组,并初始化其内容:
string[] names = { "Gus", "Mike", "Julio" };
现在,WriteLine
的选项是什么?它们有什么作用?假设你有
Console.WriteLine("you're cool " + names);
会发生什么?
首先,对"you're cool" + names
进行分析以确定它是字符串和对象的加法,因此变为:
string temp = String.Concat("you're cool ", names.ToString());
Console.WriteLine(temp);
(除了:并非完全是 ;您知道为什么吗?)
现在我们必须确定names.ToString()
的作用。它返回一个给出数组类型的字符串。如果要创建一个将内容连接在一起的字符串,请使用string.Join
。
WriteLine
的可变参数重载如何?如果我们打电话给
Console.WriteLine("you're cool ", names);
适用的WriteLine
的形式参数类型为:
(string, object)
(string, params object[])
所以有三种可能性:
(string, object)
。(string, object[])
调用object[]
。 (由于不安全的数组协方差,这在C#中是合法的。)(string, object[])
:即,创建一个新的object[1] {names}
并将其传递。C#拒绝了第三种选择:以普通形式应用的可变参数方法总是比扩展形式更好。
C#拒绝第一个选项,因为object
比object[]
更通用。
因此,C#调用第二个重载。现在,请阅读有关该过载的文档。给定建议的 format字符串和 format参数,您认为它将做什么?
答案 1 :(得分:1)
首先,您遇到的问题与Console.WriteLine
的重载功能无关。
相反,您正在创建object
变量,但没有给它们提供任何要保留的值,所以它们是null
..因此,以您当前的代码...它将最终以{{ 1}},就是这样,因为命名 "you're cool "
,mike
和gus
的变量实际上不包含任何值。
解决方案一
julio
我已经在DotNetFiddle中编辑了您的代码
解决方案2
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
private static object mike = "mike"; // give the variable a value to hold
private static object gus = "gus"; // give the variable a value to hold
private static object julio = "julio"; // give the variable a value to hold
public static void Main()
{
object[] names = new object[3];
names[1] = mike;
names[0] = gus;
names[2] = julio;
WriteAnswer(" you're cool ", names);
}
static void WriteAnswer(string description, object[] result)
{
Console.WriteLine(description + string.Join(",", result));
}
}