使用struct field作为参数

时间:2015-10-19 06:45:09

标签: c#

我有这门课。

public class EmailManager
{
   public struct AttachmentFormats
   {
        public const string Excel = ".xlsx";        
        public const string Pdf = ".pdf";
   }
   private static bool SendEmail(string to, string from, ???)
   {
      /*??? is one of the AttachmentFormats*/
   }
}

当用户想要使用SendEmail时,我想限制它们只使用一个已定义的AttachmentFormats。像

EmailManager.SendEmail("xxx","yy",EmailManager.AttachmentFormats.Excel);

这可能吗?如果是的话,我应该怎么做。

2 个答案:

答案 0 :(得分:3)

您需要enum而不是struct

public enum AttachmentFormat
{
     xlsx = 0,
     pdf = 1
}

public class EmailManager
{

   private static bool SendEmail(string to, string @from, AttachmentFormat format)
   {
      switch(format)
      {
          case AttachmentFormat.pdf: 
          // logic 
          break;
          case AttachmentFormat.xlsx: 
          // logic 
          break;
      }
   }
}

其他解决方案是创建实现此接口的接口和类:

public interface IAttachmentFormat {}

public sealed class PDFAttachmentFormat : IAttachmentFormat { } 
public sealed class XLSXAttachmentFormat : IAttachmentFormat { } 

然后检查SendEmail方法中的类型:

   private static bool SendEmail(string to, string @from, IAttachmentFormat format)
   {
      if(format is PDFAttachmentFormat) // some logic for pdf
      if(format is XLSXAttachmentFormat) // some logic for xlsx
   }

答案 1 :(得分:0)

如果您希望班级用户拨打SendEmail,则必须公开。

另外,我回应使用Enum而不是结构的早期评论。通过上面的Aram Kocharyan给出的实现,用户可以使用您预先定义的字符串,但不会被强制使用。没有什么能阻止他们打电话:

EmailManager.SendEmail("me","you","Any old string I can make up");

使用枚举方法:

EmailManager.SendEmail("me","you",EmailManager.AttachmentFormat.Excel);