如何将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.ConvertAll

 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(); 

你会得到一个只有BlueYellow的列表。