Ist es möglich, dass ein anonymer Typ ein Interface implementiert?
Ich habe einen Codeabschnitt, der funktionieren soll, aber weiß nicht, wie das geht.
Ich habe ein paar Antworten erhalten, die entweder nein sagen oder eine Klasse erstellen, die das Interface implementiert, um neue Instanzen davon zu erstellen. Das ist nicht wirklich ideal, aber ich frage mich, ob es einen Mechanismus gibt, um eine schlanke dynamische Klasse über einem Interface zu erstellen, das dies einfacher macht.
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 values)
{
foreach (var value in values)
{
Console.WriteLine("A = '{0}', B = '{1}'", value.A, value.B);
}
}
}
Ich habe einen Artikel gefunden Dynamic interface wrapping, der einen Ansatz beschreibt. Ist das der beste Weg, um dies zu tun?
1 Stimmen
Link scheint veraltet zu sein, dies könnte eine geeignete Alternative sein liensberger.it/web/blog/?p=298.
2 Stimmen
Ja, Sie können dies mit .NET 4 und höher (über das DLR) mithilfe des ImpromptuInterface NuGet-Pakets tun.
1 Stimmen
@PhilCooper Dein Link war wahrscheinlich seit mindestens 2016 nicht verfügbar, aber zum Glück wurde er vorher archiviert. web.archive.org/web/20111105150920/http://www.liensberger.it/…
0 Stimmen
Im C#9 können Sie records verwenden (devblogs.microsoft.com/dotnet/welcome-to-c-9-0). Ich weiß, dass dies nicht dasselbe ist, aber auch ein sehr leichtgewichtiger Ansatz, "einfache" Schnittstellen zu implementieren :)