2

私はC#にかなり慣れておらず、過去3日間学習しようとしています。以下のコードが正しく機能しない理由について知りたいのですが?次のエラーが発生します:オブジェクト参照がオブジェクトのインスタンスに設定されていません。data.dOffsets["roomtargets"]を呼び出そうとしたとき。ただし、data.sProcessNameの呼び出しはエラーなしで機能します。

2つのクラス/ファイルがあります。program.cs:

class Program
    {
        public static Data data = new Data();

        static void Main(string[] args)
        {
            Console.WriteLine("data.sProcessName: {0}", data.sProcessName);
            Console.WriteLine("data.dOffsets[\"roomtargets\"]: {0}", data.dOffsets["roomtargets"]);

そしてData.cs:

public class Data
    {
        public string sProcessName { get; set; }
        public Dictionary<string, int> dOffsets { get; set; }

        public Data()
        {
            sProcessName = "Client";

            Dictionary<string, int> dOffsets = new Dictionary<string, int>()
            {
                {"roomtargets", 0x0018FA48}
            };
        }
    }

どんな助けでも大歓迎です!

4

2 に答える 2

9
        Dictionary<string, int> dOffsets = new Dictionary<string, int>()
        {
            {"roomtargets", 0x0018FA48}
        };

このコードは、コンストラクター内の内部変数として辞書を初期化します。次のように変更します。

        dOffsets = new Dictionary<string, int>()
        {
            {"roomtargets", 0x0018FA48}
        };

またはthis.dOffsetsそれをより明確にするために。

于 2013-01-13T15:14:11.673 に答える
1

dOffsetsはコンストラクターに対してローカルです。あなたのクラスはすでにそのプロパティを持っているので、そこで別のローカル変数を宣言する必要はありません

public Data()
{
    sProcessName = "Client";

    dOffsets = new Dictionary<string, int>()
    {
        {"roomtargets", 0x0018FA48}
    };
}

これはうまくいくはずです

于 2013-01-13T15:16:06.393 に答える