none
連想配列のキーを取り出せない RRS feed

  • 質問

  • 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)直し方の教示をお願いします。

    2018年5月26日 1:32

回答

  • 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
    2018年5月26日 2:59
  • 参照設定が何かおかしくなっているのですかね?
    本来的には Microsoft.NETCore.UniversalWindowsPlatform を参照することによって解決されるはずです。
    この参照自体を消してしまうと、Object 型すらエラーになるので中途半端に消えている?ような印象はあります。

    ソリューションエクスプローラーのルート(ソリューション自体)を選択してパッケージの復元をしてみるとか、NuGet パッケージマネージャで Microsoft.NETCore.UniversalWindowsPlatform を一旦消して再インストールしてみるとかになりそうです。

    もっとも、このあたりは慣れていないと大変なので、ソースコード規模次第では、新規プロジェクトを作ってソースコードを移植した方が早く解決する可能性はあります。

    • 回答としてマーク ナノレス 2018年6月4日 0:37
    2018年5月26日 10:52
    モデレータ
  • ナノレスさん、こんにちは、フォーラム オペレーターの立花です。
    MSDN フォーラムへご投稿くださいまして、ありがとうございます。

    回答済みマークにつきまして、ご設定ありがとうございます。
    解決されていらっしゃるのであれば、同じ問題であとから参照した方が
    問題を解決できるように、情報をご共有いただけますと幸いです。

    もし、解決はしていないが、本件は調査することが不要になった、
    などの状況でしたら、その旨ご共有くださいませ。

    お手数をおかけいたしますが、なにとぞご協力のほど、どうぞ
    よろしくお願いいたします。


    参考になった投稿には回答としてマークの設定にご協力ください
    MSDN/TechNet Community Support 立花楓

    • 回答としてマーク ナノレス 2018年7月23日 11:49
    2018年6月4日 9:20
    モデレータ

すべての返信

  • 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
    2018年5月26日 2:59
  • 参照設定が何かおかしくなっているのですかね?
    本来的には Microsoft.NETCore.UniversalWindowsPlatform を参照することによって解決されるはずです。
    この参照自体を消してしまうと、Object 型すらエラーになるので中途半端に消えている?ような印象はあります。

    ソリューションエクスプローラーのルート(ソリューション自体)を選択してパッケージの復元をしてみるとか、NuGet パッケージマネージャで Microsoft.NETCore.UniversalWindowsPlatform を一旦消して再インストールしてみるとかになりそうです。

    もっとも、このあたりは慣れていないと大変なので、ソースコード規模次第では、新規プロジェクトを作ってソースコードを移植した方が早く解決する可能性はあります。

    • 回答としてマーク ナノレス 2018年6月4日 0:37
    2018年5月26日 10:52
    モデレータ
  • ナノレスさん、こんにちは、フォーラム オペレーターの立花です。
    MSDN フォーラムへご投稿くださいまして、ありがとうございます。

    回答済みマークにつきまして、ご設定ありがとうございます。
    解決されていらっしゃるのであれば、同じ問題であとから参照した方が
    問題を解決できるように、情報をご共有いただけますと幸いです。

    もし、解決はしていないが、本件は調査することが不要になった、
    などの状況でしたら、その旨ご共有くださいませ。

    お手数をおかけいたしますが、なにとぞご協力のほど、どうぞ
    よろしくお願いいたします。


    参考になった投稿には回答としてマークの設定にご協力ください
    MSDN/TechNet Community Support 立花楓

    • 回答としてマーク ナノレス 2018年7月23日 11:49
    2018年6月4日 9:20
    モデレータ