c#-遍历泛型类的collection属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-遍历泛型类的collection属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1859字,纯文字阅读大概需要3分钟。
内容图文
![c#-遍历泛型类的collection属性](/upload/InfoBanner/zyjiaocheng/663/53246574f0b44d5fb0f703aa4eee1a22.jpg)
尽管已经发布了许多问题,但似乎没有一个问题对我有帮助.
我已经开始了新的泛型/反射冒险,而我只是想在语法和概念上有所了解.
我有一个通用类,具有X个属性,一个是集合,所有类都工作正常,但是我在按属性名称从集合道具中提取值时遇到问题.
foreach (var property in typeof(T).GetProperties())
{
if (property.Name == "Props")
{
foreach (var item in (IEnumerable)property.GetValue(type, null))
{
var propertyName = "";
var newValue = "";
var oldValue = "";
sbDescription.AppendLine(strDescriptionVals
.Replace("{0}", (item.ToString() == "PropertyName") ? item.ToString() : "" + ", "));
sbAllNotes.AppendLine(strAllNotes
.Replace("{0}", (item.ToString() == "PropertyName") ? item.ToString() : "")
.Replace("{1}", (item.ToString() == "NewValue") ? item.ToString() : "")
.Replace("{2}", (item.ToString() == "OldValue") ? item.ToString() : ""));
}
}
}
如您所见,我已经查明了属性Props,现在我想遍历该属性并按属性名称提取值.
item.ToString()仅显示类属性的名称空间,而不显示值
希望您友善的人能为我指明正确的方向?
解决方法:
您可能想递归地“潜入” items属性.
注意,仅概念性代码片段,不能保证它在我在此处编写时起作用:
void Print(object value, string propertyName)
{
if (property.PropertyType == typeof(string) || property.PropertyType.IsPrimitive)
{
sbAllNotes.AppnedLine(.. propertyName .. value ..);
}
else if ((typeof(IEnumerable).IsAssignableFrom(property.PropertyType)
{
PrintCollectioType((IEnumerable)value);
}
else
{
PrintComplexType(value);
}
}
void PrintCollectioType(IEnumerable collection)
{
foreach (var item in collection)
{
Print(item, "Collection Item");
}
}
void PrintComplexType(IEnumerable collection)
{
foreach(var property in owner.GetType().GetProperties())
{
var propertyName = property.Name;
var propertyValue = property.GetValue(owner);
Print(item, propertyName);
}
}
要打印“道具”,请执行以下操作:
var props = typeof(T).GetProperty("Props");
var propsValue = props.GetValue(rootObject);
Print(propsValue, "Root");
内容总结
以上是互联网集市为您收集整理的c#-遍历泛型类的collection属性全部内容,希望文章能够帮你解决c#-遍历泛型类的collection属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。