3种条件的三元运算符

时间:2019-10-21 10:47:49

标签: c# asp.net asp.net-core ternary-operator

我已经在不同的环境(Windows,OsX和Linux)中使用jsReport lib

Startup.cs中,我使用此代码来启动库

services.AddJsReport(new LocalReporting()
                .UseBinary(RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
                    ? JsReportBinary.GetBinary()
                    : jsreport.Binary.OSX.JsReportBinary.GetBinary()).AsUtility()
            .Create());

因此,如果不是Windows平台,他会为OSX寻找二进制文件。

但是当有人在Linux上使用项目时,他需要将代码更改为:

services.AddJsReport(new LocalReporting()
            .UseBinary(RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
                ? JsReportBinary.GetBinary()
                : jsreport.Binary.Linux.JsReportBinary.GetBinary())

如何编写将Windows用作主语言的三元条件,如果没有,它将在OSX和Linux之间进行选择?

3 个答案:

答案 0 :(得分:4)

services.AddJsReport(new LocalReporting()
    .UseBinary(
        RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
        ? JsReportBinary.GetBinary()
        : RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
            ? Jsreport.Binary.Linux.JsReportBinary.GetBinary()
            : Jsreport.Binary.OSX.JsReportBinary.GetBinary())
    .Create();

但是写3个if并这样做是比较容易的:

// I don't know the exact type, put the correct one here if it isn't this
JsReportBinary binary;

if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    binary = JsReportBinary.GetBinary();
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
    binary = Jsreport.Binary.Linux.JsReportBinary.GetBinary();
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)
    binary = Jsreport.Binary.OSX.JsReportBinary.GetBinary());
else
    binary = null;

services.AddJsReport(new LocalReporting().UseBinary(binary).Create());

答案 1 :(得分:1)

您可以执行以下操作:

RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
      ? JsReportBinary.GetBinary() :
    RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ?
   jsreport.Binary.OSX.JsReportBinary.GetBinary()  : 
   jsreport.Binary.Linux.JsReportBinary.GetBinary())

答案 2 :(得分:0)

我还没有测试过,但是它可以工作,

services.AddJsReport(new LocalReporting()
                .UseBinary((RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && JsReportBinary.GetBinary())
                           || (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && Jsreport.Binary.Linux.JsReportBinary.GetBinary())
                           || (Jsreport.Binary.OSX.JsReportBinary.GetBinary()))
                .Create();

好处: 我们可以有任意数量的条件。