Czy istnieje sposób kontrolowania konwersji typu w języku C#? Tak na przykład, jeśli mam dwa typy z zasadniczo takich samych informacji, ale służy do wewnętrznego funkcjonowania mojego wniosku, a drugi jest DTO używany do komunikacji z aplikacjami non-.Net:Jak kontrolować konwersję typu w 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; }
}
Prawy teraz, za każdym razem muszę utworzyć nową instancję PlayerDTO z mojej instancji Player i szukam lepszego, czystszego sposobu robienia tego. Jednym z pomysłów było to, aby dodać metodę AsPlayerDTO() do klasy graczem, ale byłoby miło, gdyby można kontrolować proces konwersji typu, więc mogę to zrobić w zamian:
var playerDto = player as PlayerDTO;
Ktoś wie, czy jest to możliwe i jak mógłbym to zrobić?
Dzięki,
Przeciążanie niejawnego/jawnego operatora wydaje się działać dla mnie i jest dość czyste. Co ciekawe, nie dotyczy to tablic, ale AutoMapper wydaje się oferować tę opcję na podstawie komentarza Michaela Meadowsa poniżej. Czy istnieje sposób na wdrożenie tego bez korzystania z 3 rozszerzeń, takich jak AutoMapper? – theburningmonk
Nieważne, znalazłem odpowiedź na moje drugie pytanie na innym pytanie stackoverflow http://stackoverflow.com/questions/1865031/why-wont-castdouble-work-on-ienumerableint Array.ConvertAll (playerList.ToArray(), p => (PlayerDTO) p); – theburningmonk
Ponadto, jeśli używasz Linq, możesz użyć Wybierz ... playerArray.Select (player => (PlayerDTO) player) .ToArray(); –