トップ回答者
連想配列のキーを取り出せない

質問
-
Dictionary<string, string[]> zokuseiTOkasan;
zokuseiTOkasan = ZOKUSEItoADDITION(!zokuseiTOaddition);//←zokuseiTOadditionはbool型、ZOKUSEItoADDITIONはルーチンstring[] zokuseiarr = zokuseiTOkasan.Keys.ToArray();//←エラー発生地点
zokuseiTOkasanという連想配列のキーを、zokuseiarrという配列に代入しようとしたら、
エラー CS0012 型 'IEnumerable<>' は、参照されていないアセンブリに定義されています。アセンブリ 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' に参照を追加する必要があります。
というエラーがでて、デバッグビルドに失敗しました。(PCが意図せずシャットダウンし、起動しなおしたらこのエラーが出ました。OSはWindows 10)直し方の教示をお願いします。
回答
-
UWP アプリには触ったこともない自分がレスするのもなんですが(なので、ハズレかもしれませんが)・・・
Dictionary<TKey, TValue>.KeyCollection.CopyTo メソッド(以下の例の下の方)は試してみたでしょうか?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Xml; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { Dictionary<string, string[]> dic = new Dictionary<string, string[]>(); dic.Add("key1", new string[] { "aaa", "bbb" }); dic.Add("key2", new string[] { "ccc", "ddd" }); string[] array = dic.Keys.ToArray(); foreach (string s in array) { Console.WriteLine(s); } // 結果は: // key1 // key2 string[] array2 = new string[dic.Count]; dic.Keys.CopyTo(array2, 0); foreach (string s in array2) { Console.WriteLine(s); } // 結果は: // key1 // key2 } } }
- 編集済み SurferOnWww 2018年5月26日 3:00 訂正&追記
- 回答としてマーク ナノレス 2018年6月4日 0:37
-
参照設定が何かおかしくなっているのですかね?
本来的には Microsoft.NETCore.UniversalWindowsPlatform を参照することによって解決されるはずです。
この参照自体を消してしまうと、Object 型すらエラーになるので中途半端に消えている?ような印象はあります。ソリューションエクスプローラーのルート(ソリューション自体)を選択してパッケージの復元をしてみるとか、NuGet パッケージマネージャで Microsoft.NETCore.UniversalWindowsPlatform を一旦消して再インストールしてみるとかになりそうです。
もっとも、このあたりは慣れていないと大変なので、ソースコード規模次第では、新規プロジェクトを作ってソースコードを移植した方が早く解決する可能性はあります。
- 回答としてマーク ナノレス 2018年6月4日 0:37
-
ナノレスさん、こんにちは、フォーラム オペレーターの立花です。
MSDN フォーラムへご投稿くださいまして、ありがとうございます。
回答済みマークにつきまして、ご設定ありがとうございます。
解決されていらっしゃるのであれば、同じ問題であとから参照した方が
問題を解決できるように、情報をご共有いただけますと幸いです。
もし、解決はしていないが、本件は調査することが不要になった、
などの状況でしたら、その旨ご共有くださいませ。
お手数をおかけいたしますが、なにとぞご協力のほど、どうぞ
よろしくお願いいたします。
~ 参考になった投稿には回答としてマークの設定にご協力ください ~
MSDN/TechNet Community Support 立花楓- 回答としてマーク ナノレス 2018年7月23日 11:49
すべての返信
-
UWP アプリには触ったこともない自分がレスするのもなんですが(なので、ハズレかもしれませんが)・・・
Dictionary<TKey, TValue>.KeyCollection.CopyTo メソッド(以下の例の下の方)は試してみたでしょうか?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Xml; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { Dictionary<string, string[]> dic = new Dictionary<string, string[]>(); dic.Add("key1", new string[] { "aaa", "bbb" }); dic.Add("key2", new string[] { "ccc", "ddd" }); string[] array = dic.Keys.ToArray(); foreach (string s in array) { Console.WriteLine(s); } // 結果は: // key1 // key2 string[] array2 = new string[dic.Count]; dic.Keys.CopyTo(array2, 0); foreach (string s in array2) { Console.WriteLine(s); } // 結果は: // key1 // key2 } } }
- 編集済み SurferOnWww 2018年5月26日 3:00 訂正&追記
- 回答としてマーク ナノレス 2018年6月4日 0:37
-
参照設定が何かおかしくなっているのですかね?
本来的には Microsoft.NETCore.UniversalWindowsPlatform を参照することによって解決されるはずです。
この参照自体を消してしまうと、Object 型すらエラーになるので中途半端に消えている?ような印象はあります。ソリューションエクスプローラーのルート(ソリューション自体)を選択してパッケージの復元をしてみるとか、NuGet パッケージマネージャで Microsoft.NETCore.UniversalWindowsPlatform を一旦消して再インストールしてみるとかになりそうです。
もっとも、このあたりは慣れていないと大変なので、ソースコード規模次第では、新規プロジェクトを作ってソースコードを移植した方が早く解決する可能性はあります。
- 回答としてマーク ナノレス 2018年6月4日 0:37
-
ナノレスさん、こんにちは、フォーラム オペレーターの立花です。
MSDN フォーラムへご投稿くださいまして、ありがとうございます。
回答済みマークにつきまして、ご設定ありがとうございます。
解決されていらっしゃるのであれば、同じ問題であとから参照した方が
問題を解決できるように、情報をご共有いただけますと幸いです。
もし、解決はしていないが、本件は調査することが不要になった、
などの状況でしたら、その旨ご共有くださいませ。
お手数をおかけいたしますが、なにとぞご協力のほど、どうぞ
よろしくお願いいたします。
~ 参考になった投稿には回答としてマークの設定にご協力ください ~
MSDN/TechNet Community Support 立花楓- 回答としてマーク ナノレス 2018年7月23日 11:49