簡體   English   中英

如何在 C# 中創建與特定變量具有相同數據類型的新變量?

[英]how can I create a new variable with the same data type of a specific variable in C#?

我想在與我的變量Message相同的數據類型中創建一個新變量。 我怎樣才能做到這一點?

我嘗試了以下代碼。 但我有一個錯誤。

MessageDTO Message;
var Message2 = new Message.GetType();

錯誤:

Message 是一個變量,但用作類型。

這是我的代碼:

public string Send(MessageDTO message)
{
     MessageDTO Message2 = new MessageDTO();
     if (message is Email)
     {
         Message2= new Email();
     }else if(message is SMS)
     {
         Message2= new SMS();
     }
    // rest of code ...
 }

在哪里

 public class MessageDTO
 {
        public int Id { get; set; }
        public MessageType Type { get; set; }
        public string? Subject { get; set; }
        public string? TextBody { get; set; }
        public string? HTMLBody { get; set; }
        public DateTimeOffset SendDate { get; set; }
        public DateTime SendTime { get; set; }
 }

public class Email : MessageDTO
{
   public string From{ get; set; }
   public string To{ get; set; }
}



 public class SMS : MessageDTO
 {
   public string SenderLine{ get; set; }
   public string[] To{ get; set; }
 }

我想讓我的代碼對擴展開放,但對修改關閉(即如果我添加其他類型的消息, Send方法保持不變。)。 Send方法變得更短,如下所示:

public string Send(MessageDTO message)
{
     MessageDTO Message2 = new Activator.CreateInstance(Message.GetType());
     // rest of code ...
 }

我不清楚為什么需要在Send()中創建一個新的 object 。 知道這一點,也許另一種解決方案會更好。 但我只是假設它是必要的 go 。

一種方法是讓MessageDTO負責創建正確類型的新 object:

public class MessageDTO
{
    public abstract MessageDTO CreateAnother();
}

public class Email : MessageDTO
{
   public override MessageDTO CreateAnother() => new Email();
}

...

public string Send(MessageDTO message)
{
   MessageDTO Message2 = message.CreateAnother();
}

CreateAnother() function 還可以根據您的需要做一些更復雜的事情。 例如,它可以克隆現有的 object,而不僅僅是創建默認的新 object。 (在那種情況下,我可能會以不同的方式命名它!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM