我有一个类:Transaction.cs
public class Transaction
{
public int Transaction_id { get; set; }
public string Description { get; set; }
public string Item { get; set; }
}
我也想使用反射来获取交易集合中的值,即:
var db = new List<Transaction>();
var temp = new Transaction { Transaction_id = 123, Item = "AKP", Description = "Startup" };
var info = temp.GetType().GetProperties();
db.Add(new Transaction { Transaction_id = 45, Item = "RW", Description = "Starting" });
var type = typeof(Transaction);
var prop = type.GetProperty("Item");
var value = prop.GetValue(temp);
在属性上添加了这个循环代码:
foreach (var testing in db.GetType().GetProperties())
{
var sample = testing.GetValue(db);
Console.WriteLine(sample);
}
我在命令行中显示的值为 4。
这会给我 AKP 在屏幕上的价值。现在当我有一个交易列表时它是如何工作的?
谢谢
泛型列表是类型安全的,因此您不需要使用反射。
要遍历列表,请使用foreach
.
var db = new List<Transaction>
{
new Transaction { Transaction_id = 123, Item = "AKP", Description = "Startup" },
new Transaction { Transaction_id = 45, Item = "RW", Description = "Starting" }
}
foreach (var transaction in db)
{
Console.WriteLine(transaction.Item);
}
输出:
AKP
RW
如果你真的需要使用反射,并且这种事情在你的代码库中很常见,我会花时间写一个像这样的扩展方法:
static T GetPropertyByName<T>(this object input, string name)
{
return (T)input
.GetType()
.GetProperty(name, BindingFlags.Instance)
.GetValue(input);
}
并像这样使用它:
foreach (var transaction in db)
{
Console.WriteLine(transaction.GetPropertyByName<string>("Item"));
}
或者,如果您事先不知道属性的名称:
foreach (var row in db)
{
foreach (var p in row.GetType().GetProperties(BindingFlags.Instance))
{
Console.WriteLine(p.GetValue(row));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句