我正在将一些代码从C转换为C#。我不确定如何最好地翻译以下两行:
if (tt = v >> 16)
{
r = (t = tt >> 8) ? 24 + LT[t] : 16 + LT[tt];
}
tt,v和t是ulongs(与问题无关)。问题是我不认为C#允许在一个语句中进行赋值/条件操作。
在C#中,不能隐式地从ulong转换为bool。以下行也不编译:
if ((bool)(tt = v >> 16))
答案 0 :(得分:2)
以下是if
声明的内容。
(tt = v >> 16) != 0
您无法轻易地将int
投射到bool
。
答案 1 :(得分:2)
这是直接转换:
tt = v >> 16;
if (tt != 0) {
t = tt >> 8;
r = (t != 0) ? 24 + LT[t] : 16 + LT[tt];
}
一般来说,转换为C#时,简洁的C代码看起来不太好。我建议让它变得更加冗长,以便将来生活更轻松。 (称我有偏见,但要比那些使用新语言的人吓唬人们要多得多。)
答案 2 :(得分:1)
试试这个:
tt = v >> 16;
if (tt != 0)
答案 3 :(得分:0)
这个简单的工作:
tt = v >> 16;
if (tt != 0)
{
t = tt >> 8;
r = (t != 0) ? 24 + LT[t] : 16 + LT[tt];
}