Ama*_*ock 1 c# variables methods for-loop casting
我有一个输出整数的方法:
public int Random6()
{
int n = _r.Next (1, 7);
return n;
}
Run Code Online (Sandbox Code Playgroud)
我有一个调用方法的循环:
public static void DiceLoop()
{
int result = 0;
for(int i = 0; i < maxDice; i++)
{
result += Random6;
}
Console.WriteLine (result);
}
Run Code Online (Sandbox Code Playgroud)
我希望能够编写一次循环,然后使用变量名称传递多个方法.例如:
public static void DiceLoop()
{
int result = 0;
for(int i = 0; i < maxDice; i++)
{
result += diceType;
}
Console.WriteLine (result);
}
Run Code Online (Sandbox Code Playgroud)
哪个diceType变量将使用if函数保存方法名称.我知道我不能只有一个方法作为变量.我尝试制作diceType一个字符串并将其传递给循环,但因为Random6它发出int它不起作用.我尝试转换diceType为int,但这不起作用,因为它正在转换方法的名称,而不是它吐出的数字.我应该怎么做呢?我只需要一个额外的变量层并在某处投射吗?
p.s*_*w.g 13
您可以将委托作为变量.您可以将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);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样称呼:
DiceLoop(Random6);
Run Code Online (Sandbox Code Playgroud)
这只是解决您的特定情况的最简单方法.如果您想说,创建一个变量并将其分配给委托,您可以这样做:
Func<int> getNext = Random6;
DiceLoop(getNext);
Run Code Online (Sandbox Code Playgroud)
你甚至可以用这种方式使用lambda表达式(也就是匿名函数):
Func<int> getNext = () => _r.Next(1, 7);
DiceLoop(getNext);
Run Code Online (Sandbox Code Playgroud)