首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用方法作为变量

使用方法作为变量
EN

Stack Overflow用户
提问于 2013-06-22 05:34:28
回答 2查看 143关注 0票数 1

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

代码语言:javascript
复制
public int Random6()
{
    int n = _r.Next (1, 7);
    return n;
}

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

代码语言:javascript
复制
public static void DiceLoop()
{
    int result = 0;
    for(int i = 0; i < maxDice; i++)
    {
        result += Random6;
    }
    Console.WriteLine (result);
}

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

代码语言:javascript
复制
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转换为一个整数,但这不起作用,因为它转换的是方法的名称,而不是它输出的数字。我该怎么做呢?我是否只需要额外的一层变量并在某个地方进行强制转换?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-22 05:37:36

您可以将委托作为变量。您可以向DiceLoop函数传递一个Func参数:

代码语言:javascript
复制
public static void DiceLoop(Func<int> getNext) 
{
    int result = 0;
    for(int i = 0; i < maxDice; i++)
    {
        result += getNext();
    }
    Console.WriteLine (result);
}

然后你可以这样叫它:

代码语言:javascript
复制
DiceLoop(Random6);

这是解决你的特殊情况的最简单的方法。如果你想说,创建一个变量并将它的引用分配给一个委托,你可以这样做:

代码语言:javascript
复制
Func<int> getNext = Random6;
DiceLoop(getNext);

你甚至可以这样使用lambda expressions (也就是匿名函数):

代码语言:javascript
复制
Func<int> getNext = () => _r.Next(1, 7);
DiceLoop(getNext);
票数 13
EN

Stack Overflow用户

发布于 2013-06-22 05:50:00

要扩展P.S.w.g的优秀答案,您可以扩展您的掷骰子以接受多个边作为输入:

代码语言:javascript
复制
Func<int,int> getNextX = (x) => _r.Next(1,x+1);

将"Func<int>“理解为”返回整数的函数“,因此"Func<int,int>”是一个“接受整数作为参数并返回整数的函数”。

然后,DiceLoop将如下所示:

代码语言:javascript
复制
public static void DiceLoop(Func<int,int> roller)
{
    int result = 0, maxDice = 20;
    for(int i = 1; i <= maxDice; i++)
    {
        result += roller(i);
    }
    Console.WriteLine (result);
}

这将得到单面骰子(?)中每一卷的总和。变成了一个20面的骰子。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17244654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档