我希望找到一种紧凑的方式来使用c#内置的枚举功能完成以下任务 (位于“收藏夹”库中)。
1。。列举游戏对象列表,以获取每次迭代时当前物品的名称
2。与该项目,将字符串名称与我为方便起见而创建的一组枚举进行比较(以避免字符串中的拼写错误)
3。。如果名称与至少一个枚举匹配,则返回true并执行内容
在编写代码时,我经常会看到诸如 IList <> 和 IEnumerable <> 之类的关键字,并希望更好地理解它们。
伪代码
foreach(GameObject item in myGameObjectList)
{
if(item.name.ToLower() == nameof(IEnumerable<MyEnums>(out match /*does the string match?*/))
{
//this code will execute if the item in the list has a name matching atleast one of the enums
}
}
答案 0 :(得分:1)
我将从获取枚举列表作为数组开始。为了使代码看起来更好(但稍微慢一点),我们可以将该数组转换为列表,然后为每个名称调用Contains
。参见以下示例:
string[] names=System.Enum.GetNames(typeof(MessageType));
List<string> namesList=new List<string>(names); // to be able to use contain
foreach(GameObject item in myGameObjectList)
if(namesList.Contains(item.name.ToLower())
DoStuff();
在您的实际代码中,请在开始时获取列表/名称数组,不要在每次调用时都这样做,因为它在后台使用了反射功能,因此有点贵。
答案 1 :(得分:0)
进一步说明我对使用Linq
string comparison = "YourEnum";
List<GameObject> matches = objects.Where(x => x.name == comparison).ToList();
上例中的 matches
将是GameObjects
,它们与您提供的枚举匹配,如果有匹配项,则可以执行您希望做的事情。