当前位置: 首页 > 编程语言 > C#

Enum.TryParsewithFlagsPropertySharing

时间:2023-04-10 17:44:49 C#

Enum.TryParsewithFlagsProperty我已经编写了按值或其名称进行TryParse枚举的代码,如下所示。如何扩展此代码以包含使用Flags属性解析枚举?publicstaticboolTryParse(thisTenum_type,objectvalue,outTresult)whereT:struct{}publicstaticboolTryParse(thisTenum_type,objectvalue,boolignoreCase,outTresult)whereT:struct{result=default(T);varis_converted=false;varis_valid_value_for_conversion=newFunc[]{(e,v,i)=>e.GetType().IsEnum,(e,v,i)=>v!=null,(e,v,i)=>枚举。GetNames(e.GetType()).Any(n=>String.Compare(n,v.ToString(),i)==0)||Enum.IsDefined(e.GetType(),v)};if(is_valid_value_for_conversion.All(rule=>rule(enum_type,value,ignoreCase))){result=(T)Enum.Parse(typeof(T),value.ToString(),ignoreCase);is_converted=真;}返回is_converted;}当前此代码适用于以下枚举:enumSomeEnum{A,B,C}//可以通过'A'或'a'解析enumSomeEnum1:int{A=1,B=2,C=3}//canparseeitherby'A'or'a'or1or"1"不适合于:[Flags]enumSomeEnum2{A=1,B=2,C=4}//可以通过'A'或'a'解析//不能解析A|B谢谢!标志枚举是使用.Net约定而不是|编写的。Enum.Parse()在使用','字符串时工作正常:[Flags]publicenumFlags{A=1,B=2,C=4,D=8,}varenumString=(Flags.A|Flags.B|Flags.C).ToString();Console.WriteLine(enumString);//输出:A、B、C标志f=(Flags)Enum。解析(类型(标志),枚举字符串);控制台.WriteLine(f);//Outputs:A,B,C从.NET4开始,有一个Enum.TryParse方法。它支持开箱即用的Flags枚举:stringx=(SomeEnum2.A|SomeEnum2.B).ToString();//x=="A,B"SomeEnum2y;boolsuccess=Enum.TryParse(x,outy);//y==A|B@Pop的回答给了我一个线索,我修改了代码中的规则检查,如下所示:varis_valid_value_for_conversion=newFunc[]{(e,v,i)=>e.GetType()。IsEnum,(e,v,i)=>value!=null,(e,v,i)=>Enum.GetNames(e.GetType()).Any(n=>String.Compare(n,v.ToString(),i)==0||(v.ToString().Contains(",")&&v.ToString().ToLower().Contains(n.ToLower())))||对大家有用,需要了解更多的C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: