C#,.NET 3.5
我试图获得一个对象的所有属性,这个对象具有一个getter和一个setter的实例。我认为应该工作的代码是
PropertyInfo[] infos = source.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.GetProperty);
然而,结果包括一个没有setter的属性。为了让你简单了解我的继承结构,可能会影响到这一点(尽管我不知道如何):
public interface IModel
{
string Name { get; }
}
public class BaseModel<TType> : IModel
{
public virtual string Name { get { return "Foo"; } }
public void ReflectionCopyTo(TType target)
{
PropertyInfo[] infos = this.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.GetProperty);
foreach (PropertyInfo info in infos)
info.SetValue(target, info.GetValue(this, null), null);
}
}
public class Child : BaseModel<Child>
{
// I do nothing to override the Name property here
}
使用名称时,我最终遇到以下错误:
System.ArgumentException: Property set method not found.
发布于 2018-06-19 14:18:56
不如试试:
var qry = typeof(Foo).GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(p => p.CanRead && p.CanWrite);
发布于 2018-06-19 15:16:31
调用GetGetMethod
和GetSetMethod
属性 - 如果两个结果是非空的,那就成了
(无参数版本只返回公共方法;有一个带有布尔参数的重载指定您是否也想要非公有方法。)
https://stackoverflow.com/questions/-100000298
复制相似问题