如何将这句vb.net代码转成C#代码

sunyfun 2010-07-07 05:32:46
ElseIf ((CShort(-((buffer(0) = &H80) > False)) Or (buffer(0) And 0)) > 0) Then

看不明白这句话
...全文
102 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
mars199 2010-07-07
  • 打赏
  • 举报
回复
我用力顶
threenewbee 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wuyazhe 的回复:]
确实有点无聊的问题,但是真要转换,还是有些麻烦的,vb中限制有的时候有些少,转换的挺灵活的。
真有人这样写代码的话,估计是那天看工资生气了。故意写来遗害后续维护人员的。

主要是瞅了一眼,想想,应该不难,一看才发现好复杂,激起想弄出来的冲动。越想转越麻烦,最后还是转成c#的了。
[/Quote]
应该是原来写了简单的,然后越维护越复杂了。
ThoughtWorks的老大最近重写了Ruby版的《重构》,我觉得应该搞一个C#版的。
随时清理自己的代码是一个程序员基本的职责。
兔子-顾问 2010-07-07
  • 打赏
  • 举报
回复

确实有点无聊的问题,但是真要转换,还是有些麻烦的,vb中限制有的时候有些少,转换的挺灵活的。
真有人这样写代码的话,估计是那天看工资生气了。故意写来遗害后续维护人员的。

主要是瞅了一眼,想想,应该不难,一看才发现好复杂,激起想弄出来的冲动。越想转越麻烦,最后还是转成c#的了。
threenewbee 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyazhe 的回复:]
C# code
ElseIf ((CShort(-((buffer(0) = &H80) > False)) Or (buffer(0) And 0)) > 0) Then
------------------------------------------------------------------------------
else if 这个不说了
CShort(...) ……
[/Quote]
我们斑竹真的非常有耐心,学习。
兔子-顾问 2010-07-07
  • 打赏
  • 举报
回复
9楼的时候弄错了一点,True是-1,False是0。
最终结果这样就对了。


(((short)(-(buffer[0] == 0x80 ? -1 : 0) > -1 ? -1 : 0) | (buffer[0] & 0)) > 0)


这种可读性的代码。谁要是写出来。立刻开除,绝对不能允许有这样人在团队里。
兔子-顾问 2010-07-07
  • 打赏
  • 举报
回复
佩服写这句代码的人。这种可读性……
兔子-顾问 2010-07-07
  • 打赏
  • 举报
回复
转糊涂了。不弄了。貌似vb.net效果还不太一样。。。
KissXYL 2010-07-07
  • 打赏
  • 举报
回复
练回3贴无法跟帖。马甲路过。
isaced 2010-07-07
  • 打赏
  • 举报
回复
C#中没有elseif的写法!
捷哥1999 2010-07-07
  • 打赏
  • 举报
回复
我顶我楼上的,用力顶!!!!
兔子-顾问 2010-07-07
  • 打赏
  • 举报
回复
ElseIf ((CShort(-((buffer(0) = &H80) > False)) Or (buffer(0) And 0)) > 0) Then
------------------------------------------------------------------------------
else if 这个不说了
CShort(...) -> (short)(...)
buffer(0) -> buffer[0]
&H80 -> 0x80
(buffer(0) = &H80) -> buffer[0] == 0x80
> Flase -> vb.net中 True:0 False:-1 所以对应c# : >-1
(buffer(0) = &H80) > False -> (buffer[0] == 0x80 ? 0 : -1) > -1
因为前面还有一个-,表示这里面的不能返回boolean,需要再次转换为数字,则
-((buffer(0) = &H80) > False) -> -(((buffer[0] == 0x80 ? 0 : -1) > -1)?0:-1)
0>-1 为True,对应数字 0 , -1>-1为False,对应数字为 -1,则这个判断无意义
以上的可以简化为:-(buffer[0] == 0x80 ? 0 : -1)
CShort(-((buffer(0) = &H80) > False)) -> (short)(-(buffer[0] == 0x80 ? 0 : -1))

buffer(0) And 0 -> buffer[0] & 0

vb.net中的or既可以表示逻辑关系或,也可以表示位运算,这里前面是数字,所以后面的也被识别为数字,Or表示位运算
结果就是
else if (((short)(-(buffer[0] == 0x80 ? 0 : -1)))|(buffer[0] & 0)>0)
兔子-顾问 2010-07-07
  • 打赏
  • 举报
回复
系统转的不对。自己仔细转了一次。虽然结果一样。但貌似这句vb.net的代码恒为false吧。
((((short)-(buffer[0] == 0x80 ? 0 : -1)==0 ||( (buffer[0] & 0) == 0))?0:-1) > 0)
兔子-顾问 2010-07-07
  • 打赏
  • 举报
回复

else if((-((short) -(((buffer[0] == 0x80) < false) > false)) | (buffer[0] & 0)) > 0)
sunyfun 2010-07-07
  • 打赏
  • 举报
回复
是从vb.net的代码里拷出来的
[Quote=引用 4 楼 sunyfun 的回复:]
呵呵

引用 3 楼 teng_s2000 的回复:
引用 1 楼 angel6709 的回复:
else if((CShort(-((buffer(0) = 0x80) > False))||(buffer(0) &amp;amp;0)) > 0 )

牛人
[/Quote]
捷哥1999 2010-07-07
  • 打赏
  • 举报
回复
那不是VB.NET的代码吧,是vb的吧
sunyfun 2010-07-07
  • 打赏
  • 举报
回复
呵呵
[Quote=引用 3 楼 teng_s2000 的回复:]
引用 1 楼 angel6709 的回复:
else if((CShort(-((buffer(0) = 0x80) > False))||(buffer(0) &amp;0)) > 0 )

牛人
[/Quote]
Teng_s2000 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 angel6709 的回复:]
else if((CShort(-((buffer(0) = 0x80) > False))||(buffer(0) &0)) > 0 )
[/Quote]
牛人
sunyfun 2010-07-07
  • 打赏
  • 举报
回复
C# 没有 > False 的写法吧
angel6709 2010-07-07
  • 打赏
  • 举报
回复
else if((CShort(-((buffer(0) = 0x80) > False))||(buffer(0) &0)) > 0 )

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧