Neo*_*Neo 5 c# ienumerable ienumerator
我有IEnumerable集合,如下所示
IEnumerable<Customer> items = new Customer[]
{
new Customer { Name = "test1", Id = 999 },
new Customer { Name = "test2", Id = 989 }
};
Run Code Online (Sandbox Code Playgroud)
我想用钥匙获得价值 Id
我试过跟随
public int GetValue(IEnumerable<T> items,string propertyName)
{
for (int i = 0; i < items.Count(); i++)
{
(typeof(T).GetType().GetProperty(propertyName).GetValue(typeof(T), null));
// I will pass propertyName as Id and want all Id propperty values
// from items collection one by one.
}
}
Run Code Online (Sandbox Code Playgroud)
Ese*_*ser 10
//我将传递propertyName作为Id,并希望获得所有Id属性值
//逐个项目集合.
如果我理解正确的话
public static IEnumerable<object> GetValues<T>(IEnumerable<T> items, string propertyName)
{
Type type = typeof(T);
var prop = type.GetProperty(propertyName);
foreach (var item in items)
yield return prop.GetValue(item, null);
}
Run Code Online (Sandbox Code Playgroud)
如果要通过以下方式Customer从集合中检索名称Id:
public string GetCustomerName(IEnumerable<Customer> customers, int id)
{
return customers.First(c => c.Id == id).Name;
}
Run Code Online (Sandbox Code Playgroud)
使用,LINQ您可以通过以下方式获得具有特定ID(键)的所有客户名称(值):
var valuesList = items.Where(x => x.Id == 1).Select(v => v.Name).ToList();
Run Code Online (Sandbox Code Playgroud)
对于单个客户名称,您可以执行以下操作:
var singleName = items.FirstOrDefault(x => x.Id == 1)?.Name;
Run Code Online (Sandbox Code Playgroud)
显然,Id可以是1、2或其他任何值。
编辑:
我建议你List<Customer>代替Customer[]
所以,
var items = new List<Customer>
{
new Customer { Name = "test1", Id = 999 },
new Customer { Name = "test2", Id = 989 }
};
Run Code Online (Sandbox Code Playgroud)
只需使用LINQ即可实现您想做的事情。如果要检索特定值,可以这样使用where:
public Customer GetCustomerById(IEnumerable<Customer> items,int key)
{
return items.Where(x=>x.id==key)
.Select(x =>x.Name)
.First();
}
Run Code Online (Sandbox Code Playgroud)
这将检索匹配特定ID的客户。