Gibt es eine Möglichkeit, die Typumwandlung in C# zu steuern? So zum Beispiel, wenn ich mit im Wesentlichen der gleichen Details zwei Typen habe, aber man wird für die interne Arbeits meiner Anwendung verwendet, und der andere ist ein DTO für die Kommunikation mit non-.Net Anwendungen verwendet:So steuern Sie die Typumwandlung in C#
public sealed class Player
{
public Player(string name, long score)
{
Name = name;
Score = score;
ID = Guid.NewGuid();
}
public string Name { get; private set; }
public Guid ID { get; private set; }
public long Score { get; private set; }
}
public sealed class PlayerDTO
{
public PlayerDTO(string name, long score, string id)
{
Name = name;
Score = score;
ID = id;
}
public string Name { get; private set; }
// the client is not .Net and doesn't have Guid
public string ID { get; private set; }
public long Score { get; private set; }
}
Recht Jetzt muss ich jedes Mal eine neue Instanz von PlayerDTO aus meiner Player-Instanz erstellen und suche nach einer besseren und saubereren Methode. Eine Idee, die ich hatte, war ein AsPlayerDTO() -Methode für den Spieler Klasse hinzufügen, aber wäre schön, wenn ich den Typ Konvertierungsprozess steuern kann, damit ich diese stattdessen tun können:
var playerDto = player as PlayerDTO;
Wer weiß, ob dies möglich ist und wie könnte ich es schaffen?
Danke,
Überladen der impliziten/expliziten Operator scheint für mich zu arbeiten und es ist auch einigermaßen sauber. Seltsamerweise gilt dies nicht für Arrays, aber AutoMapper scheint diese Option basierend auf dem Kommentar von Michael Meadows unten zu geben. Gibt es eine Möglichkeit, dies zu implementieren, ohne 3. Erweiterungen wie AutoMapper zu verwenden? – theburningmonk
Macht nichts, fand die Antwort auf meine zweite Frage auf einer anderen stackoverflow Frage http://stackoverflow.com/questions/1865031/why-wont-castdouble-work-on-ienumerableint Array.ConvertAll (playerList.ToArray(), p => (Spieler DTO) p); – theburningmonk
Wenn Sie Linq verwenden, können Sie auch Select ... playerArray.Select (player => (PlayerDTO) player) verwenden. ToArray(); –