是否有一种方法可以避免在代码中使用硬编码值?

本文关键字:代码 编码值 可以避免 方法 一种 是否 | 更新日期: 2023-09-27 18:08:35

我有这样的代码:

public partial class SettingsPage : ContentPage
{
    public SettingsPage()
    {
        englishSide.GestureRecognizers.Add(new TapGestureRecognizer
        {
           App.Database.UpdateCardFrontSide(true, "English");
           App.Database.UpdateCardFrontSide(false, "Romaji");
           App.Database.UpdateCardFrontSide(false, "Kana");
           App.Database.UpdateCardFrontSide(false, "Kanji");
        })
            });

我想把它替换成这样的东西:

public partial class SettingsPage : ContentPage
{
    public SettingsPage()
    {
        englishSide.GestureRecognizers.Add(new TapGestureRecognizer
        {
           App.Database.UpdateCardFrontSide(true, 1);
           App.Database.UpdateCardFrontSide(false, 2);
           App.Database.UpdateCardFrontSide(false, 3);
           App.Database.UpdateCardFrontSide(false, 4);
        })
            });

但是有没有一种方法可以让我使用参考或其他东西而不是使用数字:1,2,3或4

我想做的是使用Lang之类的东西。英语或英语。Romaji等

是否有一种方法可以避免在代码中使用硬编码值?

听起来你想要这样做:

enum Lang
{
    English = 1,
    Romaji = 2,
    Kana = 3,
    Kanji = 4,
}

理想情况下,您还将更改您的UpdateCardFrontSide()方法,以及其他任何使用这些"魔法值"的地方,以便您使用Lang类型而不是int

如果您可以避免对名称要求特定的数值就更好了。然后你可以省略声明中的赋值,让c#编译器为你生成值。

我可以发誓你的问题以前已经问过了,但是我一直找不到一模一样的副本。同时,您可以查看对这个相关问题的非常有用的答案:

枚举的主要用途是什么?

如果你要在代码中使用数值,但你希望它是有意义的,你可以使用enum:

enum Language 
{
   English = 1,
   Romaji,
   Kana,
   Kanji
}

enum的默认行为是在enum标识符之后每个连续的枚举数加1,在本例中是English。您可以在Microsoft docs

中了解更多关于枚举的信息。

另一方面,如果你打算使用string,你可以通过创建一个带有静态属性的静态类来避免使用'magic string'

public static class Constants
{
   public static string ErrorMessage => "This is an error message";
}

之后你可以这样使用

ThrowPrettyMessage(Constants.ErrorMessage);