回答这个问题 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);
}
但更清楚的是阅读和理解发生了什么?
答案 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);
}
如果你没关系,但是你不喜欢上面问题中的第一个表述,那么我认为你应该使用明确的演员。