我有一个简单的方法,可以从 azure 移动服务检索表。
public static async List<T>GetDataFromListTable<T>()
{
var data = await MobileService.GetTable<T>().ToListAsync();
return data.Count != 0 ? data : null;
}
这很好用。
我想做的是使用另一种方法,该方法采用从服务返回的参数名称并返回该参数的值。到目前为止我有这个
public static async Task<T> GetDataFromTable<T>(string paramName)
{
var k = Activator.CreateInstance(typeof(T));
var members = typeof(T).GetProperties().Select(t=>t.Name).ToList();
if (!members.Contains(paramName))
return (T)k;
var mn = typeof(T).GetProperties()[members.IndexOf(paramName)];
var data = GetDataFromListTable<T>();
var retval = data.Select(t => t.mn);
}
问题显然是我无法执行 Linq 查询,因为 T 不包含 mn。我也用不了
var retval = data.Select(t=>t.paramName);
as paramname 只是类中成员的字符串表示形式。
简而言之...
方法1有参数名称,从方法2中获取一个列表。从方法2返回的列表中,找到参数名称并返回关联的值。
有办法做我想做的事吗?
最佳答案
你可以这样做:
var retval = data.Select(t => mn.GetGetMethod().Invoke(t, null));
或
var retval = data.Select(t => mn.GetValue(t, null));
您还可以使用这样的东西简化您的代码(未经测试,抱歉):
public static async Task<T> GetDataFromTable<T>(string paramName)
{
var k = Activator.CreateInstance(typeof(T));
var mn = typeof(T).GetProperty(paramName);
if (mn == null)
return (T)k;
var data = GetDataFromListTable<T>();
var retval = data.Select(t => mn.GetGetMethod().Invoke(t, null));
...
}
关于c# - 使用反射从列表中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863508/