You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB中‘RaiseEvent’语句的C#等价写法及带byte参数事件定义问题

你的C#写法完全是VB RaiseEvent的正确等价实现!

没错,你写的这段C#代码完美对应了VB里的RaiseEvent逻辑,两者的行为完全一致,下面给你拆解下对应关系:

1. 事件与委托的对应

VB里的事件定义:

Public Event LowOnFuel(ByVal FuelLevel As Byte)

VB编译器会在后台自动生成一个匹配签名的委托类型,而C#需要显式定义委托(或者用泛型委托简化)。你写的:

public delegate void LowOnFuelHandler(byte fuelLevel);
public event LowOnFuelHandler LowOnFuel;

完全对应VB的隐式委托生成,是标准且正确的写法。

2. 事件触发的空安全检查

VB的RaiseEvent LowOnFuel(mFuelLevel)会自动处理事件无订阅者的情况(不会抛出空引用异常),而你C#里用的:

LowOnFuel?.Invoke(mFuelLevel);

通过空条件运算符?.实现了完全相同的逻辑——只有当LowOnFuel有订阅者时才会调用委托,避免了空引用风险,这和VB的RaiseEvent行为完全匹配。

额外小提示:更简洁的C#写法

你也可以用.NET内置的泛型委托Action<byte>来替代自定义的LowOnFuelHandler,这样能少写一行委托定义,代码更简洁,功能完全一样:

public event Action<byte> LowOnFuel;

// 触发事件的代码保持不变
if (mFuelLevel < 30 && mFuelLevel > 0)
{
    LowOnFuel?.Invoke(mFuelLevel);
}

内容的提问来源于stack exchange,提问作者Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:29:04