我尝试将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.
...
}
请帮帮我。
答案 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,这是真的。否则,这是错误的。