如何判断某一个数组中是否包含指定选项(制作聊天系统的频道选择功能)

    科技2022-08-29  95

    在游戏的聊天系统制作的过程中,由于要对应很多聊天频道,如综合、本地、队伍、公会。。。每一个频道对应的信息有很大的区别,那么我们怎样用更简便的方法来实现频道判别的功能呢,在最开始,我们可以用Swittch.case来判断是否是那个那个频道,今天接触了一种新的方法,记录下来

    首先,定义一系列的枚举值,

    public enum ChatChannel { All = -1,//综合 Local = 1,//本地 Morld = 2,//世界 System = 4,//系统 Private = 8,//私聊 Team = 16,//队伍 Guild = 32//公会 }

    然后创建对应枚举值类型的数组

    private ChatChannel[] ChannelFilter = new ChatChannel[6] { ChatChannel.Local|ChatChannel.Morld|ChatChannel.Team|ChatChannel.Private|ChatChannel.System, ChatChannel.Local, ChatChannel.Morld, ChatChannel.Team, ChatChannel.Guild, ChatChannel.Private, };

    其中第一个代表综合频道(综合频道中包含了本地、世界、队伍、私聊等频道),依次向下为本地,世界,队伍,公会,私聊

    然后在判别对应频道的时候

    internal void AddMessages(ChatChannel channel,List<ChatMessage> messages)//添加消息 { for(int ch = 0;ch < 6;ch++) { if((this.ChannelFilter[ch] & channel) == channel) { this.Messages[ch].AddRange(messages); } } if(this.OnChat !=null) { this.OnChat(); } }

    通过传进来的参数判断ChannelFilter[ch] 与channel是否有共同的,如果有共同的判断是否与channel相同,如果相同,添加到对应频道的列表信息中去。 这样做的话,就可以避免用if。。。或者是case。。。可以使代码看起来比较精简,而且还能处理组合的情况,在一些场景下比较实用。

    Processed: 0.013, SQL: 9