将C迁移到C#问题!

时间:2011-05-15 14:48:33

标签: c# c

我尝试将C lib转换为C#并陷入此代码:

typedef struct _Symbol
{
    unsigned char value;
    unsigned char count;
    unsigned char under;
    unsigned char left, right;
} Symbol;

// [...]

void function(符号*符号){

...

if (! symbol -> right) break; // So, right is equivalent to bool in C#?

symbol += symbol -> right; // I have no idea what this code will do.

...

}

请帮帮我。

7 个答案:

答案 0 :(得分:5)

在C#中没有->运算符。要引用结构成员,请使用.运算符。此外,您不能使用if句子的任何表达式。 必须使用正确的布尔表达式:

if (symbol.right == 0)
    break;

另外,我不会尝试将逐行 C程序转换为C#程序。它们基于不同的范例,因此您可能需要学习一些面向对象以及C#在尝试翻译代码之前如何管理内存。

答案 1 :(得分:4)

if (! symbol -> right) break;表示如果右边为零则打破

symbol += symbol -> right;这是执行指针运算,您需要了解原因,以便将其重新编码为C#。 (假设符号的类型为Symbol*

答案 2 :(得分:1)

在C ++中,任何具有比较运算符且可与“0”进行比较的对象都可以在条件表达式中使用。如果表达式等于0,则表达式将计算为false,否则表达式将计算为true。

因此:如果symbol-> right为0,则if(!symbol->right)将为true。

以下

symbol += symbol->right 

通过symbol-> right中存储的值递增符号指针。

答案 3 :(得分:1)

试试这个:

struct Symbol
{
Char value;
int  count; // if your counting, use an integer, not a character
int  under; // not sure that is supposed to represent
int left; 
int right;
}

我不确定您想要什么,或者需要左右数据成员来做。看起来你想要至少增加它们,所以我把它们留作整数。 在这种情况下,您不能只使用if(symbol.left)测试它,而是必须使用if(symbol.left> 0)等...

C#也不使用 - >运营商,但是。运营商专属。

在.NET中,所有类型都不能仅仅被推送到其他类型。因此,您无法将字符(C#中的Char)转换为bool或int。

如果您想继续使用C,并仍然利用.NET,您可以使用托管编译器/ clr并编译所有C代码。但是你必须学习一些额外的语言关键词,并且编程有点不同。

一般来说,如果你真的是C#和.NET的新手,我强烈建议你买两本书。第一本书由Jeffrey Richter撰写(CLR来自C#)。它由微软出版社出版,非常出色。另一本书可以或应该是C#特定的。 Charles Petzold在C#的关键词中有一本很好的C#入门书,名为Programming,这对于该语言来说非常基础。

答案 4 :(得分:0)

左右都在结构中定义:

unsigned char left, right;

这不是错,正确的“正确”,而是左,右::)

它在C#中的等价物并不是bool。

答案 5 :(得分:0)

该行

if (!symbol->right) break

检查变量 right 中保存的字符是否为空(等于'\ 0')。因此,如果字符等于0,它将会中断,否则它将不会。

答案 6 :(得分:0)

  

if(!symbol - > right)break;

我相信这是对int上下文中char的boolean NOT操作。 例如:if(int)right = 0,这是真的。否则,这是错误的。