这是我正在尝试做的简化版本:

如果没有多个 if..else 子句和 switch 块,我可以模仿 Javascript 的 eval() 不寒而栗的行为来实例化 C# 中的类吗?

// Determine report orientation -- Portrait or Landscape
// There are 2 differently styled reports (beyond paper orientation)

string reportType = "Portrait";
GenericReport report;
report = new eval(reportType + "Report()");  // Resolves to PortraitReport()

需求源于这样一个事实,即我有 6 种类型的 Crystal Reports(它们做同样的事情,但看起来完全不同)用于 50 个州。每种都有 3 种样式,而不是考虑使用嵌套 if..else 语句来确定要使用 900 个报告中的哪一个的巨大 switch 块的概念,我希望有一个类似 eval 的解决方案。

最佳答案

你可以使用 Activator.CreateInstance("myAssembly", "PortrainReport"); 。尽管更具可读性的方法是创建一个 Portrait Factory,它会为您创建正确的类型。

10-07 15:42