Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将不同的对象传递给同一个函数_C#_.net_Generics - Fatal编程技术网

C# 如何将不同的对象传递给同一个函数

C# 如何将不同的对象传递给同一个函数,c#,.net,generics,C#,.net,Generics,我对动态数据有点迷茫,我需要你的帮助。这就是我想做的: 我有以下课程: public class SmsMessage : MessageCommonDefinition { public string MessageServiceKey { get; set; } public string MessageAttachments { get; set; } public bool MessageBodyUseTemplate { get; set; } publ

我对动态数据有点迷茫,我需要你的帮助。这就是我想做的:

我有以下课程:

public class SmsMessage : MessageCommonDefinition
{
    public string MessageServiceKey { get; set; }
    public string MessageAttachments { get; set; }
    public bool MessageBodyUseTemplate { get; set; }
    public string MessageBodyTemplate { get; set; }
    public string MessageBodyTemplateValues { get; set; }
    public bool ValidateWithCarrier { get; set; }
    public bool IncludeCarrierInfo { get; set; }
}

public class EmailMessage : MessageCommonDefinition
{
    public string MessageDisplayName { get; set; }
    public string MessageCc { get; set; }
    public string MessageBcc { get; set; }
    public string MessageSubject { get; set; }
    public bool MessageIsBodyHtml { get; set; }
    public bool MessageBodyUseTemplate { get; set; }
    public string MessageBodyTemplate { get; set; }
    public string MessageBodyTemplateValues { get; set; }
    public bool IsConfidential { get; set; }
    public string MessageAttachments { get; set; }
    public MailPriority MessagePriority { get; set; }
}

public abstract class MessageCommonDefinition
{
    public Guid MessageId { get; set; }
    public string CompanyCode { get; set; }
    public string MessageCode { get; set; }
    public string MessageChannelCode { get; set; }
    public string MessageTo { get; set; }
    public string MessageFrom { get; set; }
    public string MessageBody { get; set; }
    public string ChannelName { get; set; }
}
我还有一个填充模板的方法,该方法接收要填充模板的消息类型(EmailMessage、SmSMessage等),以及其他参数

方法如下:

if (triggerGroup.ToUpper().ToUpper() == AppSettingsKeys.External.ToString().ToUpper())
{
    List<PassengerTemplateEntity> passengerTemplateEntity = ACARSRepository.GetPassengerTemplateValues(emailMessage.MessageId);

    var passengerTemplateValues = DynamicClassBuilder.BuildObject();

    foreach (PassengerTemplateEntity passengerTemplate in passengerTemplateEntity)
    {
         passengerTemplateValues.AddProperty(passengerTemplate.FieldName, passengerTemplate.FieldData);
    }

    message.Body = Smart.Format(File.ReadAllText(attFilePath), passengerTemplateValues);

    message.Subject = emailMessage.IsConfidential ? SettingsManager.GetAppSettingValue(AppSettingsKeys.ConfidentialKey, "-secmsg-")
                        + " " + Smart.Format(emailMessage.MessageSubject.Trim(), passengerTemplateValues) : Smart.Format(emailMessage.MessageSubject.Trim(), passengerTemplateValues);
}
else if (triggerGroup.ToUpper() == AppSettingsKeys.Internal.ToString().ToUpper())
{
    alertTemplateValues = CoreRepository.GetExceptionMessage(emailMessage.MessageCode);

    if (alertTemplateValues != null)
    {
        message.Body = Smart.Format(File.ReadAllText(attFilePath), alertTemplateValues);
        message.Subject = Smart.Format(emailMessage.MessageSubject.Trim(), alertTemplateValues);
    }
    else
    {
        alertTemplateValues = CoreRepository.GetExceptionMessage("E127");
        throw new ArgumentException(Smart.Format("BlackBox.{0}: [Exception Code: {1}] {2}", alertTemplateValues.ShortName, alertTemplateValues.ExceptionCode, alertTemplateValues.ExceptionMessage), "ExceptionMessageCode: " + emailMessage.MessageCode, new ArgumentException());
    }
}
else
{
    alertTemplateValues = CoreRepository.GetExceptionMessage("E123");
    throw new ArgumentException(Smart.Format("BlackBox.{0}: [Exception Code: {1}] {2}", alertTemplateValues.ShortName, alertTemplateValues.ExceptionCode, alertTemplateValues.ExceptionMessage), "TriggerGroup: " + triggerGroup, new ArgumentException());
}
if(triggerGroup.ToUpper().ToUpper()==AppSettingsKeys.External.ToString().ToUpper())
{
List passengerTemplateEntity=ACARSRepository.GetPassengerTemplateValues(emailMessage.MessageId);
var passengerTemplateValues=DynamicClassBuilder.BuildObject();
foreach(PassengerTemplateEntity中的passengerTemplate)
{
passengerTemplateValues.AddProperty(passengerTemplate.FieldName,passengerTemplate.FieldData);
}
message.Body=Smart.Format(File.ReadAllText(attFilePath),passengertemplatevalue);
message.Subject=emailMessage.IsConfidential?SettingsManager.GetAppSettingValue(AppSettingsKeys.SecretentialKey,“-secmsg-”)
+“+Smart.Format(emailMessage.MessageSubject.Trim(),passengerTemplateValues):Smart.Format(emailMessage.MessageSubject.Trim(),passengerTemplateValues);
}
else if(triggerGroup.ToUpper()==AppSettingsKeys.Internal.ToString().ToUpper())
{
alertTemplateValues=CoreRepository.GetExceptionMessage(emailMessage.MessageCode);
if(alertTemplateValues!=null)
{
message.Body=Smart.Format(File.ReadAllText(attFilePath),alertTemplateValues);
message.Subject=Smart.Format(emailMessage.MessageSubject.Trim(),alertTemplateValues);
}
其他的
{
alertTemplateValues=CoreRepository.GetExceptionMessage(“E127”);
抛出新ArgumentException(Smart.Format(“BlackBox.{0}:[异常代码:{1}]{2}”)、alertTemplateValues.ShortName、alertTemplateValues.ExceptionCode、alertTemplateValues.ExceptionMessage)、“ExceptionMessageCode:+emailMessage.MessageCode、new ArgumentException());
}
}
其他的
{
alertTemplateValues=CoreRepository.GetExceptionMessage(“E123”);
抛出新ArgumentException(Smart.Format(“BlackBox.{0}:[异常代码:{1}]{2}”)、alertTemplateValues.ShortName、alertTemplateValues.ExceptionCode、alertTemplateValues.ExceptionMessage、“TriggerGroup:+TriggerGroup,new ArgumentException());
}

如您所见,该方法使用emailMessage检索值。我想要实现的是将其用作一个共享函数。我想发送一个泛型参数,不管它是emailMessage还是SmsMessage,并通过发送泛型对象来使用该函数,并用正确的值填充正确的类。

问题是什么?我会将其翻转过来。我会添加
公共抽象void SendMessage()
MessageCommonDefinition
,然后将用于发送每种类型消息的代码放入消息类型类中。您好!谢谢你的回复。我已经这样做了,但是我完成了为每个消息类重复相同的代码。如果我可以通过友好方式发送对象,我可以对所有类别使用相同的方法。这可能吗?@Ray你能用你所做的更新
MessageCommonDefinition
。如果您在
EmailMessage
SmsMessage
中都实现了
SendMessage()
,那么任何一个实例都只是
message.Send()我已经摆脱了代码,但基本上,可能是因为我不理解这个概念,我有更多的不同沟通渠道的类(电子邮件和短信被用作一个例子,以简化事情)。每次我想要发送消息时,我都需要验证是否需要填充填塞物。因此,将为每个不同的实例调用完整的If代码块。如果我使用抽象方法,我如何知道需要发送什么类型的消息,以及如何更改模板。这是一封电子邮件,但我对每封邮件都做了同样的处理。我怎么能只做一次呢?