gpt4 book ai didi

c# - 使用方法作为变量

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:05 25 4
gpt4 key购买 nike

我有一个输出整数的方法:

public int Random6()
{
int n = _r.Next (1, 7);
return n;
}

我有一个调用方法的循环:

public static void DiceLoop()
{
int result = 0;
for(int i = 0; i < maxDice; i++)
{
result += Random6;
}
Console.WriteLine (result);
}

我希望能够编写一次循环,然后使用变量名将其传递给多个方法。例如:

public static void DiceLoop()
{
int result = 0;
for(int i = 0; i < maxDice; i++)
{
result += diceType;
}
Console.WriteLine (result);
}

其中 diceType 是一个变量,它将使用 if 函数保存方法名称。我知道我不能只将方法作为变量。我尝试使 diceType 成为一个字符串并将其传递给循环,但是因为 Random6 给出了一个 int 它不会起作用。我尝试将 diceType 转换为 int,但这不起作用,因为它转换的是方法的名称,而不是它吐出的数字。我应该怎么做呢?我是否只需要一个额外的变量层并在某处进行强制转换?

最佳答案

可以将委托(delegate)作为变量。你可以传递 Func<int> 参数到你的 DiceLoop功能:

public static void DiceLoop(Func<int> getNext) 
{
int result = 0;
for(int i = 0; i < maxDice; i++)
{
result += getNext();
}
Console.WriteLine (result);
}

然后你可以这样调用它:

DiceLoop(Random6);

这只是解决您的特定案例的最简单方法。如果您想说,创建一个变量并将其引用分配给委托(delegate),您可以这样做:

Func<int> getNext = Random6;
DiceLoop(getNext);

您甚至可以使用 lambda expressions (又名匿名函数)这样:

Func<int> getNext = () => _r.Next(1, 7);
DiceLoop(getNext);

关于c# - 使用方法作为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com