隐式运算符,Linq和Lambda表达式可以降低代码的可读性。但更具可读性的是什么?

时间:2009-04-30 23:12:02

标签: c# linq lambda

回答这个问题 Why does a Linq Cast<T> operation fail when I have an implicit cast defined?

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

考虑以下两个类:

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转换为List,我们可以执行以下任何操作:

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

但更清楚的是阅读和理解发生了什么?

1 个答案:

答案 0 :(得分:2)

第一,自然而然。隐式演员的整个观点是这两种类型足够相似,只是在概念意义上只是认为它们是相同的。

你会对此犹豫不决吗?

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

如果你没关系,但是你不喜欢上面问题中的第一个表述,那么我认为你应该使用明确的演员。