C#でGetPropertyを使用し、プロパティの値の設定、取得を行いたいと思い、以下のサンプルを見つけましたが、エラーとなってしまいます。
エラー内容は以下です。
・GetValue 引数 1 を指定するメソッド 'GetValue' のオーバーロードはありません。
・SetValue 引数 2 を指定するメソッド 'SetValue' のオーバーロードはありません。
以下を見てみましたが、prop.GetValue(obj)と記述されています。
https://docs.microsoft.com/ja-jp/dotnet/api/system.reflection.propertyinfo.getvalue?view=netframework-4.6.1
どうすれば、エラーとならず、プロパティの値を設定取得できますでしょうか。
static void Main(string[] args) { var student = new Student() { ID = "0001", Name = "aiueo" }; // プロパティ情報の取得 var property = typeof(Student).GetProperty("Name"); // インスタンスの値を取得 var beforeName = property.GetValue(student); // インスタンスに値を設定 property.SetValue(student, "newName"); Console.WriteLine($"{student.ID}, {beforeName}, {student.Name}"); // 0001, aiueo, newName } class Student { public string ID { set; get; } public string Name { set; get; } }
エラーにならないです。using System.Reflection;は指定していますよね。環境等追記なさっては?
papinianus様
ご指摘、ありがとうございます。
using System.Reflectionは指定しております。
ご指摘いただいた後、環境を確認しましたところ、.Net Framework 4.0でした。
これを4.6.1にしますと、エラーが消えました。
直ったのでまあ良いとして一応。そのページの下のほう(https://docs.microsoft.com/ja-jp/dotnet/api/system.reflection.propertyinfo.getvalue?view=netframework-4.6.1#%E9%81%A9%E7%94%A8%E5%AF%BE%E8%B1%A1)をご覧になれば判明しますが、.NetFramework4.0も対象なので、別の要因ではないでしょうか。

回答2件
あなたの回答
tips
プレビュー