是否有可能使匿名类继承另一个类?

Sha*_*ica 50 c# anonymous-class

这是一个很长的镜头,但我有一个有趣的编码情况,我希望能够动态创建匿名类,但能够将它们作为参数传递给期望接口或子类的方法.换句话说,我希望能够做到这样的事情:

public class MyBase { ... }

public void Foo(MyBase something)
{
  ...
}

...
var q = db.SomeTable.Select(t =>
        new : MyBase // yeah, I know I can't do this...
        {
          t.Field1,
          t.Field2,
        });
foreach (var item in q)
  Foo(item);
Run Code Online (Sandbox Code Playgroud)

除了使用命名类之外,还有什么方法可以做到这一点吗?

Jon*_*eet 51

object不会.匿名类型总是隐式派生自,并且永远不会实现任何接口.

来自C#5规定的第7.6.10.6节:

匿名对象初始值设定项声明匿名类型并返回该类型的实例.匿名类型是直接继承的无名类类型object.

因此,如果您想要一个不同的基类,或者您想要实现一个接口,则需要一个命名类型.

  • 令人毛骨悚然的是,我早些时候就在考虑这个问题,除了接口之外。也许甚至在这个问题被问到的时候......:) (2认同)

Shl*_*itz 7

不.从文档中:

匿名类型是直接从对象派生的类类型,不能转换为除object之外的任何类型.

要解决您的问题,只需将匿名类型替换为普通类...