gpt4 book ai didi

.net - 当我定义了隐式强制转换时,为什么Linq Cast 操作失败?

转载 作者:行者123 更新时间:2023-12-03 12:58:18 27 4
gpt4 key购买 nike

我创建了两个类,其中一个在它们之间具有隐式转换:

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

当我创建一种类型的新列表并尝试将Cast 转换为另一种类型时,它会失败,并显示InvalidCastException:
List<Class2> items = new List<Class2>{new Class2{Test2 = 9}};
foreach (Class1 item in items.Cast<Class1>())
{
Console.WriteLine(item.Test1);
}

但是,这很好用:
foreach (Class1 item in items)
{
Console.WriteLine(item.Test1);
}

为什么在使用Cast 时不调用隐式强制转换?

最佳答案

因为,通过Reflector查看代码,Cast不会尝试考虑任何隐式的强制转换运算符(LINQ Cast代码已针对各种特殊情况进行了优化,但在该方向没有任何改进)(因为许多.NET语言不会)。

在没有考虑反射(reflection)和其他问题的情况下,泛型不提供任何开箱即用的方式来在任何情况下都将此类额外的因素考虑在内。

编辑:一般来说,像LINQ这样的通用工具通常不会处理更复杂的工具,例如隐式/显式,相等运算符等。

关于.net - 当我定义了隐式强制转换时,为什么Linq Cast <T>操作失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/808725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com