如何将List 转换为List ?
我无法将List
转换为List
。 我不知道为什么?
string Val = it.Current.Value.ToString(); // works well here List ValList = new List(Val.Split(',')); // compile failed
因为myEnumType
类型定义为字符串枚举类型,
public enum myEnumType { strVal_1, strVal_2, strVal_3, }
有什么不对的吗? 感谢您的回复。
编辑:哎呀,我也错过了C#2标签。 我将在下面留下其他选项,但是:
在C#2中,您可能最好使用List
:
List enumList = stringList.ConvertAll(delegate(string x) { return (MyEnumType) Enum.Parse(typeof(MyEnumType), x); });
或使用无约束旋律 :
List enumList = stringList.ConvertAll(delegate(string x) { return Enums.ParseName (x); });
请注意,这确实假设您确实有一个List
,这对于您的标题是正确的,但对于您的问题中的正文则不正确。 幸运的是,有一个等效的静态Array.ConvertAll
方法,你必须像这样使用:
MyEnumType[] enumArray = Array.ConvertAll(stringArray, delegate (string x) { return (MyEnumType) Enum.Parse(typeof(MyEnumType), x); });
原始答案
两种选择:
-
在LINQ查询中使用Enum.Parse和强制转换:
var enumList = stringList .Select(x => (MyEnumType) Enum.Parse(typeof(MyEnumType), x)) .ToList();
要么
var enumList = stringList.Select(x => Enum.Parse(typeof(MyEnumType), x)) .Cast() .ToList();
-
使用我的Unconstrained Melody项目:
var enumList = stringList.Select(x => Enums.ParseName
(x)) .ToList();
在C#2.0中:
List ValList = new List (); foreach (string x in Val.Split(',')) ValList.Add((MyEnumType) Enum.Parse(typeof(MyEnumType), x));
List list = new List (); list.Add("strVal_1"); list.Add("strVal_2"); list.Add("strVal_3"); List enumList = new List (); foreach (var item in list) { enumList.Add((myEnumType)Enum.Parse(typeof(myEnumType), item)); }
创建一个扩展方法并使用Select
do the Work:
public static class ExtensionClass { public static myEnumType GetEnumValue(this string input) { if (input == myEnumType.strVal_1.ToString()) return myEnumType.strVal_1; return input == myEnumType.strVal_2.ToString() ? myEnumType.strVal_2 : myEnumType.strVal_3; } } List ValList = new List (Val.Split(',').Select(p=>p.GetEnumValue()));
我错过了c#2.0标签:)
我为IEnumerable
添加了一个扩展方法来为我做这个。 显然,Skeet的答案是好的,但是如果字符串对于enum(你可能想要或不想要)无效,它会抛出exception,而且它看起来很难看。
public static class StringEnumerableExtensions { public static IEnumerable StringsToEnums ( this IEnumerable strs) where T : struct, IConvertible { Type t = typeof( T ); var ret = new List(); if( t.IsEnum ) { T outStr; foreach( var str in strs ) { if( Enum.TryParse( str, out outStr ) ) { ret.Add( outStr ); } } } return ret; } }
鉴于这个枚举:
public enum ColorEnum { Blue, Yellow }
您可以这样使用:
var colors = new List() {"Blue","Yellow","Black"}; var colorEnums = colors.StringsToEnums();
你会得到一个只有Blue
和Yellow
的列表。