C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: static で const な 文字列配列について


(過去ログ 63 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■36398 / inTopicNo.1)  static で const な 文字列配列について
  
□投稿者/ ぐらたん (3回)-(2009/05/28(Thu) 13:47:31)

分類:[C#] 

こんにちは。ぐらたんです。

任意の文字列を受け取り、
辞書に一致したものを
enumで返したいと考えています。

ここで、辞書の単語リストを
static で const で定義したいのですが

「エラー	1	定数 'TokenReader.TYPE_NAMES' を static に指定することはできません。」

とエラーが出てしまいます。
なので、今はstaticのみに指定しています。

こういった場合、
C#ではどのように書く事が推奨されているのでしょうか?


// 検出する種類
public enum TokenType
{
	A,
	B,
	C,
	UNKNOWN,
}

// 検出クラス
class TokenReader
{
	// 検出する名前
	private static string[] TYPE_NAMES = {
		"TokenA",
		"TokenB",
		"TokenC",
	};
	
	// 文字列から種類を検出
	public TokenType GetType( string str )
	{
		// 戻り値
		TokenType type = TokenType.UNKNOWN;
		
		// 単語帳
		Dictionary<string,TokenType> tokenList = new Dictionary<string, TokenType>();
		
		// 単語を登録
		for ( int i = 0; i < TYPE_NAMES.Length; ++ i )
		{
			tokenList.Add( TYPE_NAMES[i], (TokenType)i);
		}
		
		// 単語を検索
		if (!tokenList.TryGetValue(str, out type))
		{
		    LogWriter.Write("未知の型です " + str);
		}
		
		return type;
	}
}


# Dictionaryをローカルに持っている事も気になりますが
# こちらは後で何とかする予定です。


引用返信 編集キー/
■36399 / inTopicNo.2)  Re[1]: static で const な 文字列配列について
□投稿者/ Hongliang (401回)-(2009/05/28(Thu) 14:16:13)
C# では(というか CLI では)、組み込みの数値型、および null 参照のみしか const に指定できません。
配列フィールド自体への代入を防ぎたいなら readonly キーワードが使えます。
配列要素への代入を防ぐなら Array.AsReadOnly によって取得される ReadOnlyCollection を使用するか、適当なインデクサを定義したクラスで隠蔽します。
引用返信 編集キー/
■36401 / inTopicNo.3)  Re[2]: static で const な 文字列配列について
□投稿者/ ぐらたん (4回)-(2009/05/28(Thu) 14:32:08)
ありがとうございます!
理由はMSDNに載ってそうですね。
スッキリしました。

用件としては前者に近いので、
readonly を使わせて頂きます。
後者はもう少し見識を深めてから
手を出したいと思います。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -