Тернарный оператор на 3 условия - PullRequest
0 голосов
/ 21 октября 2019

Я использую jsReport lib в разных средах (Windows, OsX и Linux)

В 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 ]

4 голосов
/ 21 октября 2019
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 голос
/ 21 октября 2019

Вы можете сделать что-то вроде этого:

RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
      ? JsReportBinary.GetBinary() :
    RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ?
   jsreport.Binary.OSX.JsReportBinary.GetBinary()  : 
   jsreport.Binary.Linux.JsReportBinary.GetBinary())
0 голосов
/ 21 октября 2019

Я не проверял его, но он будет работать,

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();

Преимущество: у нас может быть любое количество условий.

...