【发布时间】:2010-09-16 12:02:54
【问题描述】:
是否可以让匿名类型实现接口?
我有一段代码想要使用,但不知道如何操作。
我有几个答案,要么说不,要么创建一个实现接口的类,构造它的新实例。这不是很理想,但我想知道是否有一种机制可以在接口之上创建一个精简的动态类,这会使这变得简单。
public interface DummyInterface
{
string A { get; }
string B { get; }
}
public class DummySource
{
public string A { get; set; }
public string C { get; set; }
public string D { get; set; }
}
public class Test
{
public void WillThisWork()
{
var source = new DummySource[0];
var values = from value in source
select new
{
A = value.A,
B = value.C + "_" + value.D
};
DoSomethingWithDummyInterface(values);
}
public void DoSomethingWithDummyInterface(IEnumerable<DummyInterface> values)
{
foreach (var value in values)
{
Console.WriteLine("A = '{0}', B = '{1}'", value.A, value.B);
}
}
}
我发现一篇文章 Dynamic interface wrapping 描述了一种方法。这是最好的方法吗?
【问题讨论】:
-
链接似乎已过期,这可能是一个合适的替代方案liensberger.it/web/blog/?p=298。
-
是的,您可以使用 .NET 4 及更高版本(通过 DLR)执行此操作,使用 ImpromptuInterface nuget 包。
-
@PhilCooper 您的链接已关闭,可能至少从 2016 年开始 - 但幸运的是它在那之前已存档。 web.archive.org/web/20111105150920/http://www.liensberger.it/…
-
在 C#9 中你可以使用记录 (devblogs.microsoft.com/dotnet/welcome-to-c-9-0) 我知道这不一样但也是实现“简单”接口的一种非常轻量级的方法:)
标签: c# anonymous-types