三項演算子を使用する場合は、次のようにします。
report.Load(data.BaseCompareId == 2 ? Server.MapPath("~/Content/StimulReports/MonthGroup.mrt") : Server.MapPath("~/Content/StimulReports/YearGroup.mrt"));
または(より良い):
report.Load(Server.MapPath(data.BaseCompareId == 2 ? "~/Content/StimulReports/MonthGroup.mrt" : "~/Content/StimulReports/YearGroup.mrt"));
(または、@ helb の回答のように、2 つの文字列の類似性をさらに活用することもできます。)
すでに述べたように、条件文を条件式に置き換えようとしており、条件式にはvalueが必要なため、この方法は機能しません。report.Load
どうやら を返すのでvoid
、フォームの条件式はcond ? report.Load(...) : report.Load(...)
値を持たないため、機能しません。
上記の各方法は、それらの条件式に値があるため機能します。最初のケースでは、値はServer.MapPath
;によって返される型になります。2 番目のケースでは、値は type になりstring
ます。
これを行うべきかどうかについては、どちらかの方法で行うべき議論があります。元の方法には、明確で単純であるという利点がありますが、(おそらく望ましくない) 繰り返しが含まれます。上記の後者のアプローチには、一度だけ発言し、ステートメント全体の意図 (レポートをロードするため) を強調するという利点がありますが、条件式を見ることに慣れている人によっては、間違いなく元のものよりもわずかに明確ではありません。YMMV。