gpt4 book ai didi

c# - 使用反射从列表中检索值

转载 作者:太空宇宙 更新时间:2023-11-03 10:47:29 25 4
gpt4 key购买 nike

我有一个简单的方法,可以从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com