Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换通用列表的代码清晰度?_C#_.net_Linq_Linq To Sql - Fatal编程技术网

C# 转换通用列表的代码清晰度?

C# 转换通用列表的代码清晰度?,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,此代码应将listType2s列表(list)转换为type1s列表。但我觉得功能有点难以确定 我希望看到更容易阅读、更简洁、更简洁的替代方法 List<Type1> type1s = new List<Type1>(); listType2s.ForEach(t => type1s.Add((new Type1(t)))); List type1s=新列表(); listType2s.ForEach(t=>type1s.Add((

此代码应将listType2s列表(list)转换为type1s列表。但我觉得功能有点难以确定

我希望看到更容易阅读、更简洁、更简洁的替代方法

        List<Type1> type1s = new List<Type1>();
        listType2s.ForEach(t => type1s.Add((new Type1(t))));
List type1s=新列表();
listType2s.ForEach(t=>type1s.Add((新的Type1(t)));
我个人喜欢:

var type1s = (from item in listType2s select new Type1(item)).ToList();
我应该说,我实际上更喜欢

但这主要是因为如果我想的话,我可以将
qry
用于其他邪恶的目的

我个人喜欢:

var type1s = (from item in listType2s select new Type1(item)).ToList();
var type1s = listType2s.Select(o => new Type1(o)).ToList();
我应该说,我实际上更喜欢


但这主要是因为如果我想的话,我可以将
qry
用于其他邪恶的目的

我认为最清晰的方法是

var type1s = listType2s.Select(o => new Type1(o)).ToList();
var type1s = listType2s.Select(x => new Type1(x)).ToList();

我认为最清晰的方法是

var type1s = listType2s.Select(x => new Type1(x)).ToList();

我大体上同意使用LINQ来处理这类事情,但是自从.NET 2.0以来,
List
已经有了一个
ConvertAll
方法,它实际上会稍微高效一些(因为它已经知道了大小):

List type1s=List type2s.ConvertAll(t=>newtype1(t));

我可能会自己使用LINQ,除非我有特别的理由不使用,因为它与其他可能也会使用LINQ的代码是一致的。

我一般同意使用LINQ来处理这类事情-但是
List
自.NET 2.0以来有了一个
ConvertAll
方法,它实际上会稍微更有效(因为它已经知道大小):

List type1s=List type2s.ConvertAll(t=>newtype1(t));

除非我有特别的理由不使用LINQ,否则我可能会自己使用LINQ,因为它与可能也会使用LINQ的代码的其余部分一致。

如果您是向上转换,这是一个清晰简洁的习惯用法:

List<SubType> list1 = GetListSubType();
List<BaseType> list2 = list1.OfType<BaseType>().ToList();
List list1=GetListSubType();
List list2=list1.OfType().ToList();

如果你是向上投射,这是一个清晰简洁的习惯用法:

List<SubType> list1 = GetListSubType();
List<BaseType> list2 = list1.OfType<BaseType>().ToList();
List list1=GetListSubType();
List list2=list1.OfType().ToList();

@Randiolpho我认为这段代码显示了linq方法中最清晰的意图,但没有使用内置方法那么清晰。再次感谢@Randiolpho我认为这段代码显示了linq方法中最清晰的意图,但没有使用内置方法那么清晰。再次感谢!