Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

列挙型 (省略形も同じ 列挙型) は、整数型を包む薄い言語ラッパーです。 閉じた値のセットから 1 つの値を格納するときに、列挙型の使用を制限することができます。 サイズ (小、中、大) に基づく分類は良い一例です。 制御フローまたはより堅牢な抽象化のために列挙型を使用すると、コードの臭いになることがあります。 このような用法は、列挙型の値を検査する多くの制御フロー ステートメントでは脆弱なコードにつながります。 代わりに、オブジェクト指向言語の豊富な機能をすべて使用できる列挙型クラスを作成する方法があります。 ただし、これは重要な話題ではなく、多くの場合は、好みに応じてわかりやすくするために通常の列挙型を使用することができます。 列挙型クラスを使用するとビジネス関連の概念に対する関連性が強くなります。 Enumeration 基底クラスを実装する eShopOnContainers 内の
enumのToStringで日本語名になって欲しいというケースはとてもあるある。enum に文字列の属性を: いげ太のブログと2008-01-24 - 当面C#と.NETな記録の記事を見て、今まで拡張メソッドで処理することが多かったのですが、やっぱり見た目は属性のほうがスッキリするなあ、と思った。記述が本体と離れないのが良いですよね。処理速度とか、そんなに頻繁に繰り返し繰り返し呼ぶものでもないしリフレクション上等!それ気にしたらSerializeとか出来ない!とか思ったので、基本は属性で処理することにしてみた。 enum Fruit { [AliasName("ブドウ")] Grape, [AliasName("リンゴ")] Apple, [AliasName("オレンジ")] Orange } static void Main(string[] args) { var fruit = F
class HTTP_METHOD { static get get() { return HTTP_TYPE_OBJECT.get; } static get post() { return HTTP_TYPE_OBJECT.post; } static get put() { return HTTP_TYPE_OBJECT.put; } static get delete() { return HTTP_TYPE_OBJECT.delete; } get string() { switch (this) { case HTTP_TYPE.get: return 'GET'; case HTTP_TYPE.post: return 'POST'; case HTTP_TYPE.put: return 'PUT'; case HTTP_TYPE.delete: return 'DELETE
I've been programming in Java for a while and just got thrown onto a project that's written entirely in C#. I'm trying to come up to speed in C#, and noticed enums used in several places in my new project, but at first glance, C#'s enums seem to be more simplistic than the Java 1.5+ implementation. Can anyone enumerate the differences between C# and Java enums, and how to overcome the differences?
C#でのテストはちょっとお休みして、今日はC#でタイプセーフEnumパターンの実現方法をいくつか紹介する。 C#には十分にタイプセーフなenumがあるが、それでも基本は数値型であり、switchやifによる分岐が必要になってしまう点はC言語やC++のenumと何ら変わらない。 ということで、C#でタイプセーフEnumパターンを実装することには意味がある。もちろん、C#本来のenumで十分な場合も多いので、使うか使わないかはの判断は必要だ。 まずは、C#のenumに対して全く利点のない単純なものから。 public sealed class Enum1 { private Enum1() {} public static readonly Enum1 Value1 = new Enum1(); public static readonly Enum1 Value2 = new Enum1()
Enumに文字列を与えたいというのは少なくなくよくあると思います。例えばFruits.Appleには.ToString()したら「リンゴ」と出て欲しいなー、とか。それならFruits.リンゴと、日本語名つければ?というのはごもっとも。でも、同時に「林檎」とも付けたいなー、とかも思ってしまったりするわけです。しません?Java→C#な人が一番不満に思うのはEnumのようですし(JavaのEnumは高機能!)。 例えばこんな風にかけたらいいな、って。 // こうやって属性定義するだけ! public enum Color { [Japanese("黒"), Hex("000000"), Rgb(0, 0, 0)] Black, [Japanese("白"), Hex("FFFFFF"), Rgb(255, 255, 255)] White, [Japanese("赤"), Hex("FF000
c#のEnum拡張をもうちょい楽に こちらの記事を参考に http://neue.cc/2010/11/13_285.html LINQ を使わず、generic にしてちょっと整理してみたやつ。 拡張メソッドは static かつ non-generic なクラスじゃないと定義できないので、迂回するしかなさげ。 generic クラスも静的コンストラクタ使えるんだなぁ。 LINQ を外したのは、書き下しながら挙動見たかっただけなので深い意味はないです。 可能なら元記事のLINQ使った方がいいと思います。 あ、試したのは unity5.02 です。 unity は .net のバージョンが古いから、新しい c# ならもうちょいいい方法があるかも。 using System; using System.Collections.Generic; /// enum付随データを保持する方 publ
例えば、以下のコードを VS2013 で動かすと最終的に NumberEnum.One という定数から "1" という値が取れます。 class Hoge { public NumberEnum NumberEnum { get; set; } } enum NumberEnum { Zero, One } static void Main(string[] args) { Expression<Func<Hoge, bool>> expression = _ => _.NumberEnum == NumberEnum.One; var bin = (BinaryExpression) expression.Body; var r = bin.Right; var c = r as ConstantExpression; var value = c.Value; Console.Write
画面に表示するときなどenumの値をそのままではなく、(もっと人間判りやすいように)値に対応する文字列を表示したいということは良くあって、以前、enumに拡張メソッドを定義すればスッキリ書けるんじゃないかということを書きました(C# の enum に関連する小技。)。 この方法は単純で良いと思うんですが、enumの定義と対応する名称の定義の場所が離れてるのが何か格好悪い。 そこで、属性を使えばもっと綺麗に書けるんじゃないかと試してみました。 拡張メソッドの中身がややこしくなりましたが、ジェネリックにして使いまわしできるようにすれば良いかな。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Syst
using System; using System.Collections.Generic; using System.Reflection; class Program { static void Main(string[] args) { object vt1; bool b1 = EnumEx.TryParse(typeof(FizzBuzz), "Buzz", out vt1); Console.WriteLine("{0} {1}", b1, vt1); object vt2; bool b2 = EnumEx.TryParse(typeof(FizzBuzz), "-", out vt2); Console.WriteLine("{0} {1}", b2, vt2); } } enum FizzBuzz { Fizz, Buzz } class EnumEx { privat
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; class Program { static void Main(string[] args) { var enumType = typeof(FooBar); var helper = (EnumHelperBase)Activator.CreateInstance(typeof(EnumHelper<>).MakeGenericType(enumType)); TestParse(helper, ""); TestParse(helper, "Default"); TestParse(helper, "Foo"); TestParse(helper, "Bar"); TestParse(helper, "
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く