这个扩展方法为什么会有错呢?

问题描述

publicstaticboolHas<T>(thisEnumtype,Tvalue){boolresult;try{result=(((int)type&(int)((object)value))==(int)((object)value));}catch{result=false;}returnresult;}如上代码(int)type这里提示错误14无法将类型“System.Enum”转换为“int”应该怎么改呢?哪位大哥哥,指点一下喽,小女子在这先谢谢啦!

解决方案

解决方案二:
你直接用Enum.HasFlag不就好了
解决方案三:
publicstaticclassTestClass3{publicstaticstringHas(thisEnumtype,objectvalue){boolresult;try{stringss=Enum.GetName(type.GetType(),value);returnss;//result=(((int)type&(int)((object)value))==(int)((object)value));}catch{result=false;}return"";}}这样写能不能满足你的需求
解决方案四:
看不懂你这个代码是干神马事情的。如果编程之前说不明白逻辑目的,不如删除。
解决方案五:
如果那样的话,那这个又怎么写呢?publicstaticTRemove<T>(thisEnumtype,Tvalue){Tresult;try{result=(T)((object)((int)type&~(int)((object)value)));}catch(ExceptioninnerException){thrownewArgumentException(string.Format("不能移除类型'{0}'",typeof(T).Name),innerException);}returnresult;}
解决方案六:
引用3楼sp1234的回复:

看不懂你这个代码是干神马事情的。如果编程之前说不明白逻辑目的,不如删除。

这个作用是:判断一个值是否在一个Enum中
解决方案七:
引用5楼alern008的回复:

Quote: 引用3楼sp1234的回复:
看不懂你这个代码是干神马事情的。如果编程之前说不明白逻辑目的,不如删除。

这个作用是:判断一个值是否在一个Enum中

那你直接用Enum.HasFlag不就好了
解决方案八:
引用5楼alern008的回复:

Quote: 引用3楼sp1234的回复:
看不懂你这个代码是干神马事情的。如果编程之前说不明白逻辑目的,不如删除。

这个作用是:判断一个值是否在一个Enum中

Enum.Equals()
解决方案九:
又或者用反射
解决方案十:
GetType().GetEnumValues

时间: 2024-09-15 00:58:25

这个扩展方法为什么会有错呢?的相关文章

ES6中的数组扩展方法_javascript技巧

form 转化为真正的数组 先说一下使用场景,在Js中,我们要经常操作DOM,比如获取全部页面的input标签,并且找到类型为button的元素,然后给这个按钮注册一个点击事件,我们可能会这样操作: var inputObjs=document.getElementsByTagName('input'); for(var i=0;i<inputObjs.length;i++){ if(inputObjs[i].type==='button'){ inputObjs[i].onclick=func

JavaScript中ES6字符串扩展方法_javascript技巧

es6这个String对象倒是扩展了不少方法,但是很多都是跟字符编码相关,个人选了几个感觉比较常用的方法: includes 搜索字符的神器 还记得我们之前如何判断某个字符串对象是否包含特地字符的吗? var str='google'; if(str.indexOf('o')>-1){ console.log('yes'); }else{ console.log('no'); } indexOf本来只是一个获取字符对应位置的方法,因为找到不到会返回-1这个值,就成了判断是否包含的方法,inclu

“object”不包含“Window”的定义,并且找不到可接受类型为“object”的第一个参数的扩展方法“Window”(是否缺少 using 指令或程序集引

问题描述 mshtml.IHTMLWindow2win=this.webBrowser1.Document.Window.DomWindowasmshtml.IHTMLWindow2;为什么Window字段报错有红波浪线"object"不包含"Window"的定义,并且找不到可接受类型为"object"的第一个参数的扩展方法"Window"(是否缺少using指令或程序集引用?) 解决方案 解决方案二:估计是前面或者后面有拼写

如何利用扩展方法来链式的对MVC 3中的页面进行验证_实用技巧

.Net 3.0 添加了一个语法糖就是扩展方法,其实扩展方法的本质就是对类的静态方法的调用,虽然扩展方法只是改变了我们写代码的方式,但是如果我们使用得当,可以给我们带来巨大的编码效率的提升.对于C#扩展方法的使用,我就不细说了,贴段代码说明扩展方法的使用,大家就会回忆起来. 复制代码 代码如下: public static class Extensions { public static string EndWith(this string str) { return str + "@"

运算符重载方法,扩展方法,以及方法参数

运算符重载方法 一 些编程语言允许定义运算符如果操作类型的实例,例如System.String,System.Decimal,和System.DateTime,它们 重载了==和!=运算符.但是对于CLR来说,它是完全不知道像"=="和"!="这些运算符是干什么的.编程语言定义了每一种运算符的意义以及当这些运 算符的符号出现时应该生成什么样的代码.例如C#里面,数值类型的当遇到"+"这个符号时,在编译时会生成将两个number加起来的代码,如果是

扩展方法用法及其原理和注意事项

前言 一直以来尤其像C#一些常见的语法,本人更愿意去探讨其内部实现的原理,为什么要这么做呢?只是为了当我真正在开发中运用语法的时候不会因为犯常识性错误或者说因为一些注意事项未曾注意到而耽误一些无谓的时间,同时也能理解的更深入而不是仅仅停留在表面(或许理解也不是太透).(当然本人能力有限,太高深的东西必定是研究不明白了,也只有这能力了). 概念 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类

泛型T 如何在扩展方法中使用?

问题描述 泛型T 如何在扩展方法中使用? 本来想了解一下扩展方法,但是看到文库中的实例明显有问题,特来提问 泛型对象T 如何使用Length 属性? 可以像类中一样加继承于某某类的约束吗? http://wenku.baidu.com/link?url=Vz-Cjrq24tvblbk0l1I4IPYYfZ82jkGpzGBoNBDhi6qSCJko9hSTcrKGWrunO91TqTgyqB0AMvueHUP1or-mi8ktWMejceDW6Y-OphMnBh7 public static c

C# 3.0 新特性:扩展方法初探

C#3.0中一个激动人心的特性就是扩展方法:你可以使用实例方法的语法来调用静态方法.本文仔细阐述了这一新特性并且给出了几个相应的例子. 声明扩展方法 扩展方法的行为和静态方法是非常类似的,你只能在静态类中声明它们.为声明一个扩展方法,你需要给该方法的第一个参数指定this关键字,如下例: // Program.cspublic static class EMClass{ public static int ToInt32Ext(this string s) { return Int32.Pars

C# 3.0新特性初步研究 Part2:使用扩展方法

扩展方法(Extension Method)可以为已有的类型添加新的方法定义和实现,比如int类型目前没有一个名叫xxxyyy()的方法,那么通过使用扩展方法,我们可以为int类型添加一个xxxyyy()方法.这个有点类似于用来扩展系统功能的某些设计模式. 下面我们用代码来说话:这是我们以前的写法:    1public static class Extensions 2{ 3    public static string CamelCase(string identifier) 4{ 5