是否有一种方法可以避免在代码中使用硬编码值?
本文关键字:代码 编码值 可以避免 方法 一种 是否 | 更新日期: 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);