[英]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.