[英]C# & VB6: How to convert 'with' statement to C#?
如何将这段VB6代码转换为C#?
我已经尝试过,到目前为止:
编辑:我要翻译的代码在这里存在: http : //www.codeproject.com/KB/vb-interop/MouseHunter.aspx
您还没有显示EventThief
代码,这使您很难分辨。 但一般来说:
With expression
.Foo = a
.Bar = b
End With
将转化为
var x = expression;
x.Foo = a;
x.Bar = b;
(当然,您可以明确指定类型...)
这里的共同点是expression
仅被评估一次。 在您显示的特定代码中,当然不需要额外的变量,因为表达式首先只是局部变量。
您的实际错误似乎仅与EventThief.RIGHT_DOWN
等类型有关,而不是与WITH语句有关。
编辑:好的,你现在已经显示原EventThief代码确实使用布尔...但你还没有表现出你的移植 EventThief
代码。 你写了:
它说et.LEFT_UP很短
...但是不应该这样。 在最初,它是一个Boolean
,那么为什么您的端口short
呢?
VB中的以下内容
With EventStealingInfo
.RIGHT_DOWN = True
.RIGHT_UP = True
End With
可以大致翻译成
var EventStealingInfo = new EventThief(){
RIGHT_DOWN = true,
RIGHT_UP = true
};
其中RIGHT_UP
和RIGHT_DOWN
是EventStealingInfo
类中的公共属性。
C#中的这种构造称为对象初始化器 。
像这样
With EventStealingInfo
.RIGHT_DOWN = True
.RIGHT_UP = True
End With
变成
EventStealingInfo.RIGHT_DOWN = true;
EventStealingInfo.RIGHT_UP = true;
我认为您可以走近一点:
EventThief EventStealingInfo = new EventThief()
{
RIGHT_DOWN = true,
RIGHT_UP = true
};
我可以将您的提案称为选项A。
我可以建议我认为会更容易的方案B和方案C吗?
选项B
1.从Microsoft的C#代码开始处理Windows挂钩。
2.根据需要对其进行调整,查看调用VB6代码的 API。
据我所知,C#中没有与With等效的对象,并且在引用对象的成员函数/属性时需要明确列出该对象。
没有等效的C#。
您不能仅将LEFT_UP的类型更改为bool吗?
查看代码和使用EventThief的方式,您可能希望使用标志枚举,以便可以设置各个位,然后进行按位比较。
关键字“ with”只是在设置多个属性时保存重新键入变量名的快捷方式。 C#中没有等效项。
即使您仍然遇到问题,您显然仍试图将布尔值分配给短数据类型。
EventThief类中有什么? 您可以简单地将LEFT_UP字段设为布尔值吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.