Как я могу объединить несколько похожих методов в один, который возвращает три результата? - PullRequest
1 голос
/ 25 апреля 2020

У меня есть два метода, которые очень похожи:

    public static int GetSelectedThemeOf2()
    {
        return GetSelectedThemeOf4() < 2 ? 0 : 1; 
    }

    public static bool IsLightModeSelected()
    {
        return GetSelectedThemeOf4() < 2 ? true : false;
    }

    public static string GetSelectedMode()
    {
        return GetSelectedThemeOf4() < 2 ? "Dark" : "Light";
    }

есть ли способ объединить все три в один и затем вернуть либо

    0, true, "Dark"

, либо

    1, false, "Light"

Ответы [ 6 ]

3 голосов
/ 25 апреля 2020

C# 7 Этого можно добиться с помощью кортежа. Фрагмент

public static int GetSelectedThemeOf2()
{
    return GetSelectedThemeOf4() < 2 ? 0 : 1; 
}

public static bool IsLightModeSelected()
{
    return GetSelectedThemeOf4() < 2 ? true : false;
}

public static string GetSelectedMode()
{
    return GetSelectedThemeOf4() < 2 ? "Dark" : "Light";
}

public static (int t2, bool lightMode, string mode) GetSelectedTheme()
{
    return ( GetSelectedThemeOf2(), IsLightModeSelected(), GetSelectedMode());
}

public static void Main()
{
    var theme = GetSelectedTheme();
    Console.WriteLine( theme.mode );
}

Выход

Light
2 голосов
/ 25 апреля 2020

Возможно, сделайте один метод, который хранит базовую логику c в одном месте, а некоторые для «перевода» результатов в разные форматы.

public static bool IsLightModeSelected()
{
    return GetSelectedThemeOf4() < 2 ? true : false;
}

public static int GetSelectedThemeOf2()
{
    return IsLightModeSelected() ? 0 : 1; 
}

public static string GetSelectedMode()
{
    return IsLightModeSelected() ? "Dark" : "Light";
}
1 голос
/ 25 апреля 2020

Попробуйте использовать кортеж :

public static (int themeOf2, bool lightModeSelected, string selectedMode) GetModes()
{
    var themeOf4 = GetSelectedThemeOf4() < 2;
    return (themeOf4 ? 0 : 1,
            themeOf4,
            themeOf4 ? "Dark" : "Light");
}

Вы можете использовать его так:

var modes = GetModes();
Console.WriteLine(modes);
Console.WriteLine(modes.themeOf2);
Console.WriteLine(modes.lightModeSelected);
Console.WriteLine(modes.selectedMode);
1 голос
/ 25 апреля 2020

Вы можете сделать следующее:

public Tuple<int, bool, string> GetTupple()
{
   return GetSelectedThemeOf4() < 2 ? Tuple.Create(0, true, "Dark") : Tuple.Create(1, false, "Light");
}

Вот как вы можете получить доступ к членам:

var myTuple = GetTuple() // this returns the Tuple, see GetTuple declaration

Console.WriteLine(myTupple.Item1);
Console.WriteLine(myTupple.Item2);
Console.WriteLine(myTupple.Item3);
1 голос
/ 25 апреля 2020

Вы можете посмотреть на Tuple.

, затем вы можете вернуть

Tuple<int, bool, string>, вы можете получить такие вещи, как это

Tuple<int, bool, string> r = Tuple.Create(0, true, "Dark");
r.item1; // 0
r.item2; // true
r.item3; // "Dark"

Пример

public static Tuple<int, bool, string> getData(){
    int theme = GetSelectedThemeOf2();
    bool light = IsLightModeSelected();
    string mode = GetSelectedMode();
    return Tuple.Create(theme, light, mode);
}

Приветствия

РЕДАКТИРОВАТЬ: добавил пример

0 голосов
/ 25 апреля 2020

Может быть, вы могли бы упростить это так:

    public static int GetSelectedThemeOf2()
    {
        return Comparison() ? 0 : 1;
    }

    public static bool IsLightModeSelected()
    {
        return Comparison() ? true : false;
    }

    public static string GetSelectedMode()
    {
        return Comparison() ? "Dark" : "Light";
    }

    private static bool Comparison()
    {
        return GetSelectedThemeOf4() < 2;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...