有没有办法可以避免在我的代码中使用硬编码值?

时间:2016-09-25 05:03:35

标签: c#

我有这段代码:

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.English或Lang.Romaji等。

2 个答案:

答案 0 :(得分:2)

听起来你想要这样的东西:

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

理想情况下,您还会更改UpdateCardFrontSide()方法,以及其他任何使用这些“神奇值”的方法,以便您使用Lang类型代替int

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

我可以发誓你之前已经问过你的问题,但我一直无法找到完全重复的问题。与此同时,您可以查看这个相关问题的非常有用的答案:

What is main use of Enumeration?

答案 1 :(得分:0)

如果您要在代码中使用数值,但希望它有意义,可以使用枚举:

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

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

中详细了解枚举

另一方面,如果你打算使用字符串,你可以避免使用魔术字符串'通过创建具有静态属性的静态类

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

以后你可以像这样使用它

ThrowPrettyMessage(Constants.ErrorMessage);