c# – 比较两个类型为T的System.Enum
发布时间:2020-12-15 17:49:02 所属栏目:百科 来源:网络整理
导读:我现在非常接近了解Generics(我认为). 但是,只是认为System.Enum不容易实现为泛型类型. 我有这门课: public class ButtonTEnum where TEnum : struct,IConvertible,IComparable,IFormattable { public TEnum Identifier { get; private set; //Set in the c
我现在非常接近了解Generics(我认为).
但是,只是认为System.Enum不容易实现为泛型类型. 我有这门课: public class Button<TEnum> where TEnum : struct,IConvertible,IComparable,IFormattable { public TEnum Identifier { get; private set; //Set in the ctor } } 和 public abstract class AbstractInputDevice<TEnum> where TEnum : struct,IFormattable { private List<Button<TEnum>> _buttons = new List<Button<TEnum>>(); public Button<TEnum> GetButton(TEnum Identifier){ foreach(Button<TEnum> button in _buttons){ if(button.Identifier == Identifier) //<- compiler throws return button; } Debug.Log("'" + GetType().Name + "' cannot return an <b>unregistered</b> '" + typeof(Button<TEnum>).Name + "' that listens to '" + typeof(TEnum).Name + "." + Identifier.ToString() + "'."); return null; } } InputDevice可能看起来像这样: public class Keyboard : AbstractInputDevice<KeyCode> { private void Useless(){ Button<KeyCode> = GetButton(KeyCode.A); } } 编译器在这里抛出一个编译错误: if(button.Identifier == Identifier) //In AbstractInputDevice above 我相信我无法比较这两个TEnums,因为它们实际上并不是Enums. 我用过这个资源: 我感谢任何更好的解决方案或修复. 解决方法
而不是不可能的
button.Identifier == Identifier 你应该使用 EqualityComparer<TEnum>.Default.Equals(button.Identifier,Identifier) 这样可以避免将值装入对象框(或IComparable框). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 用JAXB生成一个XML文档
- cocos2dx 3.5 VS2013 release模式下面编译不通过的bug
- ruby-on-rails – Safari未在Rails应用中加载HTML5视频
- iphone – 如何以编程方式为UIWebView创建后退,前进和刷新按
- vb6.0 office excel 和wps共存,创建正确的excel对象以便操
- 解决本地调试导致的Ajax跨域问题
- 《从零开始学Swift》学习笔记(Day58)―― Swift编码规范之
- c# – 使用MVVM的WPF:使用RelativeSource的DataBinding
- ArcGIS API for Flex(四) 地图的当前范围和规模
- Pytest学习(六) - conftest.py结合接口自动化的举例使用