如何将此C#foreach代码转换为C ++?

时间:2016-12-01 21:20:45

标签: c++ visual-c++

我正在使用c ++在visual studio窗口窗体上制作tic tac toe游戏。 如何将此C#代码转换为C ++代码?

private Void disableButtons()
{
    try
    { 
        foreach (Control c in Controls)
        {
        Button b = (Button)c;
        b.Enabled = false;
        }
    }
    catch{ }
}

3 个答案:

答案 0 :(得分:1)

如果没有使用具有类控制按钮的任何其他库,并且Button类具有"已启用"则无法将其转换为纯C ++代码。公共成员。 但是,您可以将其转换为 C ++ / CLI 代码,您也可以在其中混合使用纯C ++代码。

private Void disableButtons()
{
    try
    { 
        for each (Control^ c in Controls)
        {
            Button^ b = (Button^)c;
            b->Enabled = false;
        }
    }
    catch{ }
}

答案 1 :(得分:0)

以下是如何在c ++中使用C#的foreach的示例:

#include <iostream>

int main()
{
    const int SIZE = 3;
    int myArray[SIZE] = { 1, 2, 3 };
    for (int & i : myArray) // make sure to put the &
    {
        i = i + 10;
    }

    for (int i = 0; i < SIZE; i++)
    {
        std::cout << myArray[i] << std::endl;
    }

    return 0;
}

语法应如下所示:

for(type name : collection) { // your code here  }

你可以把&amp;如果要更改原始元素,请在类型和名称之间

for(type & name : collection) { // your code here }

答案 2 :(得分:0)

你已经标记了这个Visual C ++,所以我假设你正在使用MFC。如果你使用Qt或wxWidgets或其他东西,答案会有所不同。

如果您已经拥有了一个容器中的控件ID,那么每个容器上都有:

CWnd *c = GetWindow(GW_CHILD);
while (c)
    {
    c->EnableWindow(FALSE);
    c = c->GetNextWindow(GW_HWNDNEXT);
    }

但是,如果你没有这样一个控件容器,但不知何故想继续迭代所有控件:

def countSumOfTwoRepresentations2(n, l, r):
    c=0
    for i in range(l,r+1):
        for j in range(l,i+1):
            if(i+j==n):
                c+=1
    return(c)

我建议使用第一个选项,因为您可以具体了解要修改的控件。如果您只想要按钮,第二个选项会很棘手。