小编tro*_*een的帖子

是否可以根据枚举输入返回泛型类?

我正在使用 Razor 语法编写一个小型电子邮件模板引擎来填充令牌。我有几种电子邮件类型:

public enum EmailType { Welcome, Reminder }
Run Code Online (Sandbox Code Playgroud)

这些类型有相应的模板和模型,例如Welcome电子邮件有一个模板:

<p>Welcome, @Model.Name</p>
Run Code Online (Sandbox Code Playgroud)

和相应的模型:

public class WelcomeModel { public string Name { get; set; } }
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个方法来为给定的枚举强制一个正确的模型,我会想象这样的事情:

public ITemplate<T> GenerateTemplate(EmailType emailType)
{
    switch (emailType)
    {
        case EmailType.Welcome:
            return new EmailTemplate<WelcomeModel>();

        case EmailType.Reminder:
            return new EmailTemplate<ReminderModel>();
    // ...
}
Run Code Online (Sandbox Code Playgroud)

where EmailTemplate<T> : ITemplate<T>,那么我可以链接该方法:

engine
    .GenerateTemplate(EmailType.Welcome)
    .WithModel(new WelcomeModel()) // this knows it wants WelcomeModel
                                   // and should complain with compiler error otherwise
Run Code Online (Sandbox Code Playgroud)

我在此处显示的代码无法编译,因为T未知。然而,这T不能推断:

public ITemplate<T> …
Run Code Online (Sandbox Code Playgroud)

c# generics enums

5
推荐指数
1
解决办法
56
查看次数

标签 统计

c# ×1

enums ×1

generics ×1