使用switch语句更改字体大小的方法

dii*_*___ 5 c# switch-statement

我有一个带有这样的switch语句的方法,每次窗口大小改变时都会调用它:

int fontSup = someBoolean ? 18 : 12;
int fontSmall = someBoolean ? 22 : 15;
int fontNormal = someBoolean ? 26 : 20;
int fontTitle = someBoolean ? 28 : 22;

switch (Window.DeviceFamily)
{
    case DeviceFamily.Phone:
        fontSup = someBoolean ? 18 : 6;
        fontSmall = someBoolean ? 22 : 8;
        fontNormal = someBoolean ? 26 : 12;
        fontTitle = someBoolean ? 28 : 14;
        break;
    case DeviceFamily.Tablet:
        fontSup = someBoolean ? 18 : 8;
        fontSmall = someBoolean ? 22 : 12;
        fontNormal = someBoolean ? 26 : 15;
        fontTitle = someBoolean ? 28 : 17;
        break;
    case DeviceFamily.Desktop:
        fontSup = someBoolean ? 18 : 12;
        fontSmall = someBoolean ? 22 : 15;
        fontNormal = someBoolean ? 26 : 20;
        fontTitle = someBoolean ? 28 : 22;
        break;
}
Run Code Online (Sandbox Code Playgroud)

我现在认为使用私有方法会有更美观和更短的解决方案.但是,我在这里挣扎.我可以这样做:

private void SetFontSize (ref int fontToChange, bool someBoolean, int firstValue, int secondValue)
{
    // Same switch statement as in the other method
}
Run Code Online (Sandbox Code Playgroud)

我只需要为我想要更改的每种字体调用此方法.但我不认为这是做我想要的最美丽,最简单的方法.也许早上太早就无法进行逻辑思考.

我也试过这个:

private int SetFontSize (bool someBoolean, int firstValue, int secondValue)
{
    return (someBoolean ? firstValue : secondValue);
}
Run Code Online (Sandbox Code Playgroud)

但在我看来,这是不是一个真正的进步,因为我只需要改变fontSup = someBoolean ? 18 : 6;fontSup = SetFontSize(someBoolean, 18, 6);.

你能帮我找一个合适的解决方案吗?

Mat*_*son 4

你可以这样做:

首先将字体大小设置封装在一个类中:

public sealed class FontSize
{
    public int Sup;
    public int Small;
    public int Normal;
    public int Title;
}
Run Code Online (Sandbox Code Playgroud)

现在您可以在类中的某个位置初始化一个 staticFontSize和一个 static ,如下所示:Dictionary<DeviceFamily, FontSize>

static readonly FontSize _defaultFontSize = new FontSize { Sup = 18, Small = 22, Normal = 26, Title = 28 };

static readonly Dictionary<DeviceFamily, FontSize> _fontSizeMap = new Dictionary<DeviceFamily, FontSize>
{
    { DeviceFamily.Phone,   new FontSize { Sup =  6, Small =  8, Normal = 12, Title = 14 } },
    { DeviceFamily.Tablet,  new FontSize { Sup =  8, Small = 12, Normal = 15, Title = 17 } },
    { DeviceFamily.Desktop, new FontSize { Sup = 12, Small = 15, Normal = 20, Title = 22 } }
};
Run Code Online (Sandbox Code Playgroud)

FontSize然后实现一个查找方法以从 bool 等返回 a ,DeviceFamily如下所示:

public static FontSize GetFontSize(DeviceFamily deviceFamily, bool someBoolean)
{
    if (!Enum.IsDefined(typeof(DeviceFamily), deviceFamily))
        throw new ArgumentOutOfRangeException(nameof(deviceFamily));

    if (someBoolean)
        return _defaultFontSize;

    return _fontSizeMap[deviceFamily];
}
Run Code Online (Sandbox Code Playgroud)