gpt4 book ai didi

c# - 在 C# 中使用反射检查属性是否为列表

转载 作者:行者123 更新时间:2023-12-04 12:50:59 25 4
gpt4 key购买 nike

我现在坚持要输出我的对象的值。其中一些确实有 List<string>使用 ToString() 导致问题的属性方法。这是我在基类中用于将属性的名称和值转换为字符串的代码。

public override string ToString()
{
string content = "";
foreach (var prop in this.GetType().GetProperties())
{
if (prop.PropertyType is IList<string> && prop.GetType().IsGenericType && prop.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List<>)))
content += prop.Name + " = " + PrintList((List<string>)prop.GetValue(this));
else
content += prop.Name + " = " + prop.GetValue(this) + "\r\n";
}
content += "\r\n";
return content;
}

private string PrintList(List<string> list)
{
string content = "[";
int i = 0;
foreach (string element in list)
{
content += element;
if (i == list.Count)
content += "]";
else
content += ", ";
}
return content;
}

无论如何,检查属性是否为 List 不起作用。这可能是一个愚蠢的问题,或者是一种糟糕的反射(reflection)方式,但我对它有点陌生,并且会感谢任何帮助弄清楚发生了什么。

最佳答案

public override string ToString()
{
StringBuilder content = new StringBuilder();
foreach (var prop in this.GetType().GetProperties())
{
var propertyType = prop.PropertyType;
var propertyValue = prop.GetValue(this);
if (propertyValue != null)
{
if (propertyValue is IEnumerable<string>)
content.AppendFormat("{0} = {1}", prop.Name, PrintList(propertyValue as IEnumerable<string>));
else
content.AppendFormat("{0} = {1}", prop.Name, propertyValue.ToString());
}
else
content.AppendFormat("{0} = null", prop.Name);
content.AppendLine();
}

return content.ToString();
}

private string PrintList(IEnumerable<string> list)
{
var content = string.Join(",", list.Select(i => string.Format("[{0}]", i)));
return content;
}

关于c# - 在 C# 中使用反射检查属性是否为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38617920/

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