¿Hay alguna manera de controlar la conversión de tipo en C#? Así, por ejemplo, si tengo dos tipos esencialmente con los mismos detalles, pero una se utiliza para el funcionamiento interno de mi solicitud y el otro es un DTO utilizado para comunicarse con aplicaciones non-.Net:Cómo controlar la conversión de tipo en 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; }
}
Derecho ahora, necesito crear una nueva instancia de PlayerDTO desde mi instancia de Player en todo momento y estoy buscando una forma mejor y más limpia de hacerlo. Una idea que tuve fue la de añadir un método AsPlayerDTO() a la clase de jugador, pero sería bueno si puedo controlar el proceso de conversión de tipo de modo que pueda hacer esto en su lugar:
var playerDto = player as PlayerDTO;
Alguien sabe si esto es posible y cómo podría ser capaz de hacerlo?
Gracias,
Sobrecargar el operador implícito/explícito parece funcionar para mí y también es razonablemente limpio. Sin embargo, curioso, esto no se aplica a las matrices, pero AutoMapper parece dar esa opción en función del comentario de Michael Meadows a continuación. ¿Hay alguna manera de implementar esto sin usar 3ras extensiones como AutoMapper? – theburningmonk
No importa, encontré la respuesta a mi segunda pregunta sobre otra pregunta de stackoverflow http://stackoverflow.com/questions/1865031/why-wont-castdouble-work-on-ienumerableint Array.ConvertAll (playerList.ToArray(), p => (PlayerDTO) p); – theburningmonk
Además, si está utilizando Linq, puede usar Seleccionar ... playerArray.Select (player => (PlayerDTO) player) .ToArray(); –