我有2个子程序,这样它们就可以让两个不同的玩家找到一个名字,但是当我在主要的地方打电话时,它说一个参数1必须通过一个' ref'关键字,但我不是已经这样做了吗?
static string GetPlayer1(ref string name1)
{
Console.WriteLine("PlayerX enter your name:");
name1 = Console.ReadLine();
return name1;
}
static string GetPlayer2(ref string name2)
{
Console.WriteLine("PlayerO enter your name:");
name2 = Console.ReadLine();
return name2;
}
static void Main(string[] args)
{
string name1 = GetPlayer1(name1);
string name2 = GetPlayer2(name2);
...
答案 0 :(得分:4)
此处方法参数中的ref
不需要,实际上您甚至不需要参数。将其更改为:
static string GetPlayer1()
{
Console.WriteLine("PlayerX enter your name:");
return Console.ReadLine();
}
static string GetPlayer2()
{
Console.WriteLine("PlayerO enter your name:");
return Console.ReadLine();
}
static void Main(string[] args)
{
string name1 = GetPlayer1();
string name2 = GetPlayer2();
}
但是,如果您的意图使用ref
(作为示例或练习),那么这将是如何做到的。这些方法现在没有返回类型(void
而不是string
),因为文本是通过赋值给ref
参数返回的。
static void GetPlayer1(ref string name1)
{
Console.WriteLine("PlayerX enter your name:");
name1 = Console.ReadLine();
}
static void GetPlayer2(ref string name2)
{
Console.WriteLine("PlayerO enter your name:");
name2 = Console.ReadLine();
}
static void Main(string[] args)
{
string name1;
string name2;
GetPlayer1(ref name1); // "ref" must now be specified, simply because
GetPlayer2(ref name2); // both methods also specify it.
}
有关ref
的更多信息(例如何时或如何使用它),请参阅以下问题:
- Example of practical of "ref" use
- Why use the 'ref' keyword when passing an object?
答案 1 :(得分:0)
实际上,你没有这样做:
string name1 = GetPlayer1(ref name1);
string name2 = GetPlayer2(ref name2);
您所做的是将ref关键字添加到方法定义中(创建ref 参数)。您还必须在方法调用中使用它(创建ref 参数)。
在你目前的情况下,虽然没有必要通过ref传递参数。您使用GetName
方法的返回值设置它们。
答案 2 :(得分:0)
如果您使用 ref 参数定义方法,则需要使用参数作为参考调用该方法:
static void Main(string[] args)
{
string name1 = GetPlayer1(ref name1);
string name2 = GetPlayer2(ref name2);
}
只是为了完整性,正如其他答案已经告诉你的那样:我没有在这里看到参考调用的必要性,你可以在没有它的情况下实现你的目标。