将C++指针结构转换为C#

3

I have 2 structs in C language:

struct CSquare
{
    char Side;
    int  Row;
    int  Col;    
};

struct CSide
{
   char     m_Side;           
   char     m_Blocks[3][3];     
   CSquare  *m_Moves;
};

以及 C++ 代码:

int Count = 0;
int Flag = 0;
if (m_Down->m_Blocks[0][1] == *m_Down)
{
    Count++;
    Flag |= 2;
    // type of m_Down is CSide
}

我正在尝试将它们转换为C#:

public class Square
{
    public char Side { get; set; }
    public int Row { get; set; }   
    public int Col { get; set; }
}

public class CubeSide
{
    private char Side { get; set; }
    private char[,] _block = new char[3, 3];
    private Square[] moves;

    public char[,] Block
    {
        get { return _block; }
        set { _block = value; }
    }

    internal Square[] Moves
    {
        get { return moves; }
        set { moves = value; }
    }
}

但是我不知道如何转换行:

if (m_Down->m_Blocks[0][1] == *m_Down)

转换为C#代码应该怎么做?

我该如何将这行代码转换为C#代码?


1
在将C中的char转换为C#时要小心,它们可能具有不同的含义。在C#中,char实际上表示Unicode字符。那么m_Down到底是什么? - Dirk
1
m_Down->m_Blocks[0][1] == *m_Down 对我来说看起来很奇怪,除非有一个重载的运算符。 - Ken Kin
1
这段代码背后的逻辑是什么? - akalenuk
1
你那里有一个类型错误,我认为。m_Down->m_Blocks[0][1]char 类型,而 *m_DownCSide 类型。 - Zach Johnson
2
@KenKin 是的,我猜测重载可能是为了比较 m_side 字段...?我们需要更多信息。 - Zach Johnson
显示剩余4条评论
1个回答

1

这行代码没有意义,我猜它总是评估为false。

您可以在该行上设置断点并执行快速监视,评估*m_Down以确保没有超载运算符。

然后,评估条件。根据您的项目类型,放置一些printf(“if内部”)/ printf(“else内部”),消息框或将其写入文件中。如果条件评估为true,请打印m_Down->m_BLocks [0] [1]和*m_Down的值...

确保您首先了解此行背后的逻辑。一旦理解了它,就很容易用c#编写它。

PS:在C#中,使用Byte而不是Char


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接