C# 如果要执行for块,如何为布尔返回类型返回true

C# 如果要执行for块,如何为布尔返回类型返回true,c#,unity3d,C#,Unity3d,所以我读了这个问题,但它是用python写的,我是用c写的# 不管怎样,我有一个这样的方法 public bool要求(字符串升级名){ 对于(int i=0;i

所以我读了这个问题,但它是用python写的,我是用c写的#

不管怎样,我有一个这样的方法

public bool要求(字符串升级名){
对于(int i=0;i

在编写此代码时,我认为返回true会停止for块的执行,因此我开始思考,当有for块要执行时,如何为
布尔
返回类型返回true?

根据您的注释,另一个扩展函数仅在所有迭代都为true时才返回true:

        public bool HasRequirements(string upgradeName){
            for (int i = 0; i < upgradeRequirements [upgradeName].Length; i++) {
                if (upgradesPurchased [upgradeRequirements [upgradeName] [i]]) {
                    // we skip return true
                    continue;
                } else {
                    // false condition, immed return false
                    return false;
                }
            }
            // we did not met false - so we can return true
            return true;
        }
        public IEnumerable<bool> HasRequirements(string upgradeName)
        {
            bool returnValue = false;
            for (int i = 0; i < upgradeRequirements[upgradeName].Length; i++)
            {
                if (upgradesPurchased[upgradeRequirements[upgradeName][i]])
                {
                    yield return true;
                }
                else
                {
                    yield return false;
                }
            }
            yield return returnValue;
        }
public bool要求(字符串升级名){
对于(int i=0;i
如果您想获得“多个结果”,另一种可能是使用该语句。你可以在这里找到一篇详细描述它的so帖子:

使用yield,它会根据以下枚举继续返回值。之后,可以检查返回值是否全部为真:

        public bool HasRequirements(string upgradeName){
            for (int i = 0; i < upgradeRequirements [upgradeName].Length; i++) {
                if (upgradesPurchased [upgradeRequirements [upgradeName] [i]]) {
                    // we skip return true
                    continue;
                } else {
                    // false condition, immed return false
                    return false;
                }
            }
            // we did not met false - so we can return true
            return true;
        }
        public IEnumerable<bool> HasRequirements(string upgradeName)
        {
            bool returnValue = false;
            for (int i = 0; i < upgradeRequirements[upgradeName].Length; i++)
            {
                if (upgradesPurchased[upgradeRequirements[upgradeName][i]])
                {
                    yield return true;
                }
                else
                {
                    yield return false;
                }
            }
            yield return returnValue;
        }
public IEnumerable要求(字符串升级名)
{
bool returnValue=false;
对于(int i=0;i
“如果一个组件尚未购买,则应返回false;否则,如果所有组件均已购买,则应返回true”

也许你需要从你所处的方向重新思考:

public bool HasRequirements(string upgradeName)
{
    for (int i = 0; i < upgradeRequirements [upgradeName].Length; i++) 
    {
        if (upgradesPurchased [upgradeRequirements [upgradeName] [i]]) 
        {
            continue; 
        } else {
            return false;  // if one component has not been bought
        }
    }
    return true; // all components were bought
}
public bool要求(字符串升级名)
{
对于(int i=0;i

现在,如果正在检查的当前购买已完成,则继续下一步,基本上忽略它并继续。但是如果一个未完成,就足够考虑当前状态的错误,所以返回false并丢弃其他检查,因为它最终将是错误的。

肯定会停止执行。返回语句的灵魂目的是给出输出,从而停止整个执行。你想在for循环中做什么?你能提供一些描述吗?@段落请看关于ded answer的评论。如果same
i=0
返回true,然后
i=1
返回false,然后
i=2
返回true,那么
布尔值将在返回false时返回true,并且不会停止执行,它将继续下去。因此,是的,returnValue将始终更改为最新计算的表达式。如果要返回找到的第一个表达式值,则应直接返回将停止执行的值。但是,如果您已经确定了返回值,为什么还要继续执行呢?就像我有一个升级,它具有所需的组件,并且在我能够购买它之前必须购买所有3个组件,因此如果一个组件尚未购买,那么它应该返回false,否则如果购买了所有组件,那么它应该返回trueUpdated我的帖子:)答案很简单,真不敢相信我竟然没有得到