将IEnumerable <T>转换为List <SomeObject>

1 c#

所以我在C#中构建一个小应用程序,我有一个IEnumerable,我想把它转换成List.这就是我得到的:

var enumerable = SettingsManager.ReadSettings();
var list = enumerable.Cast<Setting>().ToList();
Run Code Online (Sandbox Code Playgroud)

编译器说无法从使用中推断出ReadSettings.这就是ReadSettings的样子:

public static IEnumerable<T> ReadSettings<T>()
{
     //Code omitted
     return JsonConvert.DeserializeObject<T[]>(fileAsString).ToList<T>();
}
Run Code Online (Sandbox Code Playgroud)

Him*_*ere 7

如果您的方法是通用的,则应提供泛型类型参数.从你的用法我想你是在类型之后Setting,所以你的正确代码是这样的:

var enumerable = SettingsManager.ReadSettings<Setting>();
var list = enumerable.ToList();
Run Code Online (Sandbox Code Playgroud)

现在enumerable有一个在compile -time中已知的强类型,这就是为什么你可以省略将该列表中的每个元素都转换为Setting-type.

如果您不知道停留在提到使用反射在运行时you're实际的类型在这个岗位.

编辑:因为您的ReadSettings-method实际上通过调用生成一个列表,ToList您可以在第二ToList行省略显式的second -call并转换为List<T>.另外 - 和imho更好 - 是在内部省略那个电话ReadSettings.