c# – 即使定义了一个显式的cast操作符,IEnumerable.Cast也不会工作?

前端之家收集整理的这篇文章主要介绍了c# – 即使定义了一个显式的cast操作符,IEnumerable.Cast也不会工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个明确的转换定义从类型为Foo类型.
public class Bar
{
  public static explicit operator Foo(Bar bar)
  {
    return new Foo(bar.Gar);
  }
}

public class Foo
{
  public string Gar { get; set; }

  public Foo() { }

  public Foo(string gar) { Gar = gar; }
}

但是,当我做:

using System.Linq;

...

var manyFoos = manyBars.Cast<Foo>();

它抛出一个例外,说它不能投射.

如何告诉Cast使用我的演员操作来尝试转换?

解决方法

Cast操作符是在代码中使用转换时编译器调用的静态方法.它们不能动态使用. Enumerable.Cast执行两个无约束泛型类型的运行时转换,因此在编译期间无法知道哪一个使用操作符.要做你想要的,你可以使用选择:
manyFoos.Select(foo => (Bar)foo);

猜你在找的C#相关文章