2

フォロー コードを 1 行に変換する方法

if (data.BaseCompareId == 2)
    report.Load(Server.MapPath("~/Content/StimulReports/MonthGroup.mrt"));
else
    report.Load(Server.MapPath("~/Content/StimulReports/YearGroup.mrt")); 

私はこのコードを試しましたが、うまくいきませんでした

data.BaseCompareId == 2
    ? report.Load(Server.MapPath("~/Content/StimulReports/MonthGroup.mrt"))
    : report.Load(Server.MapPath("~/Content/StimulReports/YearGroup.mrt"));
4

6 に答える 6

5

代わりにこれを試してください:

string path = data.BaseCompareId == 2
    ? "~/Content/StimulReports/MonthGroup.mrt"
    : "~/Content/StimulReports/YearGroup.mrt";
report.Load(Server.MapPath(path));

report.Load() は void を返すため、機能しません。

編集版:

string s = data.BaseCompareId == 2 
      ? "MonthGroup.mrt" 
      : "YearGroup.mrt";
report.Load(Server.MapPath("~/Content/StimulReports/" + s));
于 2013-11-04T10:30:08.447 に答える
2

void を返すと想定してreport.Loadいるため、「機能しません」。とは言え、どうしてこんなことを?最初の例は完全に明確です。

于 2013-11-04T10:29:06.197 に答える
1

?: を使用する場合は、ここでそれを使用して、実際に異なる部分のみが分岐ステートメントにあるようにします。

string fileName = (data.BaseCompareId == 2) ? "MonthGroup.mrt" : "YearGroup.mrt";
report.Load(Server.MapPath("~/Content/StimulReports/" + fileName));
于 2013-11-04T10:34:27.433 に答える
1

三項演算子を使用する場合は、次のようにします。

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。

于 2013-11-04T10:30:01.927 に答える
0

この構文は、何かを返す場合にのみ使用されます。したがって、次のようなことができます。

var path = (data.BaseCompareId == 2) ? "~/Content/StimulReports/MonthGroup.mrt" : "~/Content/StimulReports/YearGroup.mrt";

report.Load(Server.MapPath(path));
于 2013-11-04T10:32:07.420 に答える