C'è un modo per controllare la conversione del tipo in C#? Così, per esempio, se ho due tipi con essenzialmente le stesse informazioni, ma viene utilizzato per il funzionamento interno della mia applicazione e l'altro è un DTO utilizzato per comunicare con le applicazioni non-.NET:Come controllare la conversione di tipo 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; }
}
destro ora, ho bisogno di creare una nuova istanza di PlayerDTO dalla mia istanza Player ogni volta e sto cercando un modo migliore e più pulito per farlo. Un'idea che avevo era di aggiungere un metodo AsPlayerDTO() per la classe di giocatore, ma sarebbe bello se riesco a controllare il processo di tipo di conversione in modo che io possa fare questo, invece:
var playerDto = player as PlayerDTO;
Qualcuno sa se questo è possibile e come potrei essere in grado di farlo?
Grazie,
Il sovraccarico dell'operatore implicito/esplicito sembra funzionare per me ed è anche ragionevolmente pulito. Curioso però, questo non si applica agli array, ma AutoMapper sembra dare quell'opzione basata sul commento di Michael Meadows qui sotto. C'è un modo per implementarlo senza utilizzare terze estensioni come AutoMapper? – theburningmonk
Non importa, ho trovato la risposta alla mia seconda domanda su un'altra domanda StackOverflow http://stackoverflow.com/questions/1865031/why-wont-castdouble-work-on-ienumerableint Array.ConvertAll (playerList.ToArray(), p => (PlayerDTO) p); – theburningmonk
Inoltre, se stai usando Linq, puoi usare Select ... playerArray.Select (player => (PlayerDTO) player) .ToArray(); –