C# 泛型遇到的坑
问题阐述:
当函数A调用函数B,如果A使用了泛型,并且使用了where限定某个接口,则函数T必须也使用泛型并且也必须使用where限定某个接口,而不能直接在参数中引入这个接口的变量,而编译器不会报错(VS2019)
举例说明
函数A
public void Write<T>(T msg) where T : Google.Protobuf.IMessage
{
currentMap.CachePlayerMessage(msg, this);
}
函数B必须为如下格式
public void CachePlayerMessage<T>(T msg, PlayerChar player) where T : Google.Protobuf.IMessage
{
cachedPlayerMessage.Add(speedUpFsmIndex, player.Uid, msg);
}
错误使用方式
public void CachePlayerMessage(IMessage msg, PlayerChar player)
{
cachedPlayerMessage.Add(speedUpFsmIndex, player.Uid, msg);
}
使用该方式虽然不会报错,但是会存在一系列问题。