Entwickler-Ecke

Andere .NET-Sprachen - Anonyme Klasse außerhalb von LINQ


Christian S. - Fr 30.05.08 20:35
Titel: Anonyme Klasse außerhalb von LINQ
Hi!

Ich würde gerne eine anonyme Klasse benutzen, aber nicht in einem Linq-Statement. Es soll in etwa so aussehen:


Delphi-Prism-Quelltext
1:
2:
3:
4:
  var rows := new List<AnonymeKlasse>;
  using reader := MySqlHelper.ExecuteReader(...) do
    while reader.Read do
      rows.Add(new AnonymeKlasse(...));


Nun müsste ich die anonyme Klasse ja schon bei Erstellung der Liste irgendwie definieren. Geht das überhaupt oder muss ich mit einer privaten nested Klasse arbeiten?

Grüße
Christian


Robert_G - Sa 31.05.08 08:56
Titel: Re: Anonyme Klasse außerhalb von LINQ
user profile iconChristian S. hat folgendes geschrieben:
Nun müsste ich die anonyme Klasse ja schon bei Erstellung der Liste irgendwie definieren. Geht das überhaupt oder muss ich mit einer privaten nested Klasse arbeiten?
Die einzige Möglichkeit das zu lösen ohne selbst die Klasse zu definieren wäre Extensionmethods:

Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
uses 
  System.Runtime.CompilerServices, 
  System.Collections.Generic;

type
  [Extension]
  AnonymousListExtender = public static class
  public
    [Extension]
    method MakeEmptyList<T>(input : T) : List<T>;
  end;
  
implementation

method AnonymousListExtender.MakeEmptyList <T>(input : T) : List<T>;
begin
  exit new List<T>();
end;
Und so würde es benutzt werden:

Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var list := new class(Abc := 1
                      Def := "2").MakeEmptyList();
list.Add(new class(Abc := 1,
                   Def := "2"));
list.Add(new class(Abc := 3,
                   Def := "4"));

list.ForEach(i -> Console.WriteLine(i.Abc + ", " + i.Def));