This is a long shot, but I have a funny coding situation where I want the ability to create anonymous classes on the fly, yet be able to pass them as a parameter to a method that is expecting an interface or subclass. In other words, I'd like to be able to do something like this:

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

Is there any way to do this other than using a named class?

有帮助吗?

解决方案

No. Anonymous types always implicitly derive from object, and never implement any interfaces.

From section 7.6.10.6 of the C# 5 specificiation:

An anonymous object initializer declares an anonymous type and returns an instance of that type. An anonymous type is a nameless class type that inherits directly from object.

So if you want a different base class or you want to implement an interface, you need a named type.

其他提示

No. From the documentation:

Anonymous types are class types that derive directly from object, and that cannot be cast to any type except object.

To solve your problem, just replace the anonymous type with normal class...

Cannot extend an anonymous but you could declare your method to accept a dynamic parameter if you really need this to work.

Short answer: no

Long answer: You could use a C# proxy class. There are several tools that can proxy classes. For example Moqs. https://github.com/moq/moq4

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top