c# enum の値を対応

enum の値を対応する任意の文字列に変換する

画面に表示や印刷するときなど、enum値を文字列に変換したいときがあります。

そういうとき、c#enumに対しても拡張メソッドを定義することが可能なので、enum値を表示用の文字列に
変換する拡張メソッドを定義しておくと便利です。
例えば、
// enum定義
enum Gender { Unknown, Male, Female };
というenum定義に対して、
// enum定義のヘルパクラス
static class GenderExt
{
// Gender に対する拡張メソッドの定義
public static string DisplayName(this Gender gender)
{
string[] names = { “不明”, “男性”, “女性” };
return names[(int)gender];
}
}
という静的クラスを定義すると、
Console.WriteLine(Gender.Male.DisplayName()); // => ‘男性’ と出力される。
という感じで使うことができます。
数値がenumで定義済みかどうかチェックする

外部からの入力値などをenum値に変換するときなど、値がキャスト可能かどうか事前に確認したい時があります。

そういう場合、Enumクラスの静的メソッドIsDefinedで値が定義済かどうかチェックすることができます。
MSDN:Enum.IsDefined メソッド
public static bool IsDefined(
Type enumType,
Object value
)
使い方は以下のような感じで。
int n = 1 // 入力値
if (Enum.IsDefined(typeof(Gender), n))
Console.WriteLine(Gender);
else
Console.WriteLine(“Undefined”);
実行すると、
Male
と表示される筈です。
enumの値を列挙する

enumで定義された値を列挙したいしたい場合、Enumクラスの静的メソッド GetValues
を用いることで、定義済みの値を配列で受け取ることができます。
MSDN:Enum.GetValues メソッド
public static Array GetValues(
Type enumType
)
戻り値は Array なので、そのまま foreach に渡すことができます。
foreach (var gender in Enum.GetValues(typeof(Gender)))
{
Console.WriteLine(gender.DisplayName());
}
実行すると、
不明
男性
女性
と表示される筈です。
サンプルプログラム

上記内容を簡単なヘルパクラスにまとめてみました。
// enum定義
enum Gender { Unknown, Male, Female };

// enum定義のヘルパクラス
static class GenderExt
{
// Gender に対する拡張メソッドの定義
public static string DisplayName(this Gender gender)
{
string[] names = { “不明”, “男性”, “女性” };
return names[(int)gender];
}

// 整数値が enum で定義済みかどうか?
public static bool IsDefined(int n)
{
    return Enum.IsDefined(typeof(Gender), n);
}

// Foreach用のGetEnumeratorを持つヘルパクラス
public class EnumerateGenders
{
    public IEnumerator<Gender> GetEnumerator()
    {
        foreach (var gender in Enum.GetValues(typeof(Gender)))
            yield return gender;
    }
}

// enum定義をforeachに渡すためのヘルパクラスを返す
public static EnumerateGenders Enumerate()
{
    return new EnumerateGenders();
}

}

class Program
{
static void Main(string[] args)
{
// enumを文字列に変換する。
Console.WriteLine(“{0} => {1}”, Gender.Unknown, Gender.Unknown.DisplayName());

    // 整数値がenumの値として定義済みかチェックする
    int n = 1;
    if (GenderExt.IsDefined(n))
        Console.WriteLine("整数値:{0}は{1}として定義されています。", n, ((Gender)n).ToString());
    else
        Console.WriteLine("整数値:{0}は未定義です。", n);

    // 定義済みのenumを列挙する
    foreach (var gender in GenderExt.Enumerate())
    {
        Console.WriteLine("{0}:{1}", gender.DisplayName(), (int)gender);
    }
}

}
実行すると
Unknown => 不明
整数値:1はMaleとして定義されています。
不明:0
男性:1
女性:2
と表示される筈です。
実際のプログラムで利用する場合、拡張メソッドとそれ以外のユーティリティ的なメソッドでクラスを分割し、ユーティリティ的なメソッドは汎用的に使えるようにジェネリッククラスとして記述するほうが良いでしょう。
// ジェネリックを利用した汎用ヘルパクラス
static class EnumUtil
{
// 整数値が enum で定義済みかどうか?
public static bool IsDefined(int n)
{
return Enum.IsDefined(typeof(T), n);
}

// Foreach用のGetEnumeratorを持つヘルパクラス
public class EnumerateEnum
{
    public IEnumerator<T> GetEnumerator()
    {
        foreach (T e in Enum.GetValues(typeof(T)))
            yield return e;
    }
}

// enum定義をforeachに渡すためのヘルパクラスを返す
public static EnumerateEnum Enumerate()
{
    return new EnumerateEnum();
}

}
使い方は
foreach (var gender in EnumUtil.Enumerate())
{
Console.WriteLine(gender)
}
という感じ。
さらに、usingを利用して
using GenderUtil = EnumUtil;
という感じに別名を定義するとより使いやすくなります

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值