前提・実現したいこと
リフレクションを使用して、
作成したデータをList型の中に格納したいのですがうまくいきません。
ご助言お願いいたします。
発生している問題・エラーメッセージ
NullReferenceException: Object reference not set to an instance of an object
該当のソースコード
public class character { public int ID; public string Name; } List<character> CharaList = new List<character>(); private void Start() { //キャラ作成 //----- character test = new character(); test.ID = 1; test.Name = "ゲレゲレ"; //格納 //--------- var add = this.GetType().GetField("CharaList").GetType().GetMethod("Add"); //① add.Invoke(CharaList, new character[] { test }); }
試したこと
"CharaList"を文字列で受け取って格納したいと思っています。
①と書いてある
this.GetType().GetField("CharaList").GetType().GetMethod("Add");
が問題のようです。
そもそもCharaListがGetType()で取れてきていないようでnullになってしまいます。
this.GetType().GetField("CharaList").GetType().GetMethod("Add");
List<T> とわかっているならキャストすればいいと思います。
すみません、ちょっとC#勉強中で申し訳ないのですがキャストするとコード的にはどのようになりますでしょうか。
お手数ですがよろしくお願いいたします。
リフレクションを使う理由はなんでしょうか。
解決後にはなりますが、本当にその必要があるか気になったのでコメントだけ残しておきます。
今回の質問のように人が注意してコーディングをしないと実行時にエラーが起きるので、リフレクションを使うという選択はなるべくしない方が良いです。
人が注意するのではなく、C#で書いたソースコードをVisualStudioなどのツールでコンパイルすることで問題の回避をするという選択をするべきと思います。
回答2件
あなたの回答
tips
プレビュー