1

File -> New item > Resource を使用してリソース ファイルを作成し、2 つのキーと 2 つの値を設定しました。
埋め込みリソースとして設定すると、値を取得して受け取ることができます。

ResourceName.ResourceManager.GetString("Key");

しかし、リソースが埋め込まれていないときにそれを行うと、例外が発生します。

A first chance exception of type 
'System.Resources.MissingManifestResourceException' occurred in mscorlib.dll

作成したリソースで自分自身を初期化する ResourceManager オブジェクトを作成するにはどうすればよいですか?

私は試した:

ResourceManager resourceManager = ResourceManager.CreateFileBasedResourceManager
(resourceFile, filePath, null);

パスとファイル名は問題ありませんでしたが、オブジェクトが null で例外がスローされた場合。

ソースからこの読み取り値をたどっていましたが、どちらも機能しませんでした。ファイルを読み込めませんでしたか?

4

1 に答える 1

2

ilansch が元の質問のコメントに追加した質問に答えるには:

また、電話してキーを検索できるメンバーが欲しいです

1 つの方法を次に示します (プロジェクトに「ResourceName.resx」という名前の「リソース ファイル」を既に追加していると仮定します)。

ResourceSet rs = ResourceName.ResourceManager.GetResourceSet(
    Thread.CurrentThread.CurrentUICulture, true, true);
Dictionary<string, object> resources = rs.Cast<DictionaryEntry>().ToDictionary(r => (string) r.Key, r => r.Value);

// Can now list all keys, e.g.:
foreach (string key in resources.Keys)
{
    Debug.WriteLine(key);
}

// ...or can find out whether a key is present:
object v;
if (resources.TryGetValue("Key", out v))
{
    Debug.WriteLine(v);
}

これにより、リソース ファイル内のすべてのリソースが に読み込まれ、Dictionary<string, object>それを使用してキーを検出できます。ただし、リソースのセット全体をメモリにロードするため、これは非常に効率的ではない場合があります。

キーのリストだけが必要な場合は、次のようにすることができます。

string[] keys = rs.Cast<DictionaryEntry>().Select(r => (string) r.Key).ToArray();

それが実際に役立つかどうかはわかりません。なぜなら、ここでの全体的な目標が何であるかがはっきりしないからです。

于 2013-02-25T15:32:05.443 に答える