如何使用反射从 class 获取值,c#
how to GetValue from the class using reflection,c#
我有一个二班
class FOO
{
public string Id{get;set;}
public Model Model{get;set}
}
class Model
{
public string Id
}
我需要在扩展方法中访问 foo.Model.Id
在扩展方法中考虑 T
是我们为 FOO
传递的类型
我可以访问T.GetType().GetProperty("Model").GetValue(instance, null);
但是如何访问Foo.Model.Id
?
你必须再做一次同样的事情:
var model = instance.GetType().GetProperty("Model").GetValue(instance, null);
var id = model.GetType().GetProperty("Id").GetValue(model, null);
你只需要为下一个对象重复你原来的陈述:
public static int GetId<T>(this T obj)
{
var model = obj.GetType().GetProperty("Model").GetValue(instance, null);
return (int)(model.GetType().GetProperty("Id").GetValue(instance, null));
}
但是为什么要将它放在通用扩展方法中是值得商榷的。这是一个非常具体的 属性 链,因此没有多大意义。
一种更简单的方法是使用 dynamic
- 那么您根本不需要扩展方法:
dynamic d = obj;
int id = obj.Model.Id;
或者更好地使用接口:
public interface IFoo
{
Model Model {get;set;}
}
public class Foo : IFoo
{
public string Id{get;set;}
public Model Model{get;set}
}
public static int GetId(this IFoo obj)
{
return obj.Model.Id;
}
我有一个二班
class FOO
{
public string Id{get;set;}
public Model Model{get;set}
}
class Model
{
public string Id
}
我需要在扩展方法中访问 foo.Model.Id
在扩展方法中考虑 T
是我们为 FOO
我可以访问T.GetType().GetProperty("Model").GetValue(instance, null);
但是如何访问Foo.Model.Id
?
你必须再做一次同样的事情:
var model = instance.GetType().GetProperty("Model").GetValue(instance, null);
var id = model.GetType().GetProperty("Id").GetValue(model, null);
你只需要为下一个对象重复你原来的陈述:
public static int GetId<T>(this T obj)
{
var model = obj.GetType().GetProperty("Model").GetValue(instance, null);
return (int)(model.GetType().GetProperty("Id").GetValue(instance, null));
}
但是为什么要将它放在通用扩展方法中是值得商榷的。这是一个非常具体的 属性 链,因此没有多大意义。
一种更简单的方法是使用 dynamic
- 那么您根本不需要扩展方法:
dynamic d = obj;
int id = obj.Model.Id;
或者更好地使用接口:
public interface IFoo
{
Model Model {get;set;}
}
public class Foo : IFoo
{
public string Id{get;set;}
public Model Model{get;set}
}
public static int GetId(this IFoo obj)
{
return obj.Model.Id;
}