C# 隐式运算符、Linq和Lambda表达式会降低代码的可读性。但什么更具可读性?

C# 隐式运算符、Linq和Lambda表达式会降低代码的可读性。但什么更具可读性?,c#,linq,lambda,C#,Linq,Lambda,在回答这个问题时, 我发现有很多方法可以在对象之间隐式转换 考虑以下两类: public class Class1 { public int Test1; } public class Class2 { public int Test2; public static implicit operator Class1(Class2 item) { return new Class1 { Test1 = item.Test2 }; } }

在回答这个问题时,

我发现有很多方法可以在对象之间隐式转换

考虑以下两类:

public class Class1 
{ 
    public int Test1;
}
public class Class2
{
    public int Test2;
    public static implicit operator Class1(Class2 item)
    {
        return new Class1 { Test1 = item.Test2 };
    }
}
为了将列表转换为列表,我们可以执行以下任一操作:

List<Class2> items = new List<Class2> { new Class2 { Test2 = 9 } };

foreach (Class1 item in items)
{
    Console.WriteLine(item.Test1);
}

foreach (Class1 item in items.ConvertAll<Class1>(i=>i))
{
    Console.WriteLine(item.Test1);
}

foreach (Class1 item in items.Select<Class2, Class1>(i=> i))
{
    Console.WriteLine(item.Test1);
}

foreach (Class1 item in items.Select(i=>i))
{
    Console.WriteLine(item.Test1);
}
List items=newlist{newclass2{Test2=9};
foreach(项目中的1类项目)
{
控制台写入线(第1项);
}
foreach(items.ConvertAll(i=>i)中的Class1项)
{
控制台写入线(第1项);
}
foreach(items中的Class1项。选择(i=>i))
{
控制台写入线(第1项);
}
foreach(items中的Class1项。选择(i=>i))
{
控制台写入线(第1项);
}

但是,阅读和理解正在发生的事情,哪一个更清楚呢?

首先,自然。隐式强制转换的全部要点是,这两种类型非常相似,因此,从概念上讲,只需指出它们是相同的即可

你会对此犹豫不决吗

List<byte> items = new List<byte> { 1, 2, 3, 4 };

foreach (int i in items) // since bytes implictly cast to ints
{
    Console.WriteLine(i + 1000);
}
List items=新列表{1,2,3,4};
foreach(items中的int i)//因为字节隐式地转换为int
{
控制台写入线(i+1000);
}

如果你同意,但你不喜欢上面问题中的第一个公式,那么我认为你应该使用显式转换。

是的,我会的。但如果我需要传递一个列表,而不是foreach循环,而我所拥有的只是一个列表,那么我需要某种类型的转换。上面的代码段都提供了这个函数,但它更简单。