如何在C#中控制类型转换

the*_*onk 7 .net c# types type-conversion

有没有办法控制C#中的类型转换?例如,如果我有两种类型具有基本相同的细节,但一种用于我的应用程序的内部工作,另一种是用于与非.Net应用程序通信的DTO:

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; }
}
Run Code Online (Sandbox Code Playgroud)

现在,我需要每次从我的Player实例创建一个新的PlayerDTO实例,我正在寻找一种更好,更清晰的方法.我的一个想法是向播放器类添加一个AsPlayerDTO()方法,但如果我可以控制类型转换过程会很好,所以我可以这样做:

var playerDto = player as PlayerDTO; 
Run Code Online (Sandbox Code Playgroud)

任何人都知道这是否可能以及我怎么能这样做?

谢谢,

Mar*_*ann 5

您可以在两种类型之间实现显式的convesion运算符.

您还可以考虑使用AutoMapper完成任务.


Pet*_*ete 3

您可以实现隐式或显式类型转换:http://msdn.microsoft.com/en-us/library/ms173105.aspx

或者,如果您想避免每个类都必须了解另一个类,则可以使用自定义映射或现有映射库(如AutoMapper )