使用struct field作为参数
本文关键字:参数 field struct 使用 | 更新日期: 2023-09-27 18:18:12
我有这个类。
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
时,我想限制他们只使用一个定义的attachmentformat。像
EmailManager.SendEmail("xxx","yy",EmailManager.AttachmentFormats.Excel);
这可能吗?
你需要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
}
如果你想让你的类的用户调用SendEmail,那么它必须是公共的。
同样,我重复前面关于使用Enum而不是结构体的注释。通过上面Aram Kocharyan给出的实现,用户可以使用预定义的字符串,但不是强制的。没有什么可以阻止它们调用:
EmailManager.SendEmail("me","you","Any old string I can make up");
使用枚举方法:
EmailManager.SendEmail("me","you",EmailManager.AttachmentFormat.Excel);