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
.
因此,如果您想要一个不同的基类,或者您想要实现一个接口,则需要一个命名类型.