我有KeyValuePair<K,T>
的列表。我想从T
打印详细信息,但我不知道它的类型是为了进行演员表。例如,T
中存储的值可以是Student
,Person
,Movie
等,我想打印出这些信息。假设我有p as KeyValuePair
,我尝试p.Value.ToString()
,但它只打印出类型。有没有办法做到这一点?
答案 0 :(得分:2)
如果您想在调用时获得有意义的输出,则需要在类型中覆盖 ToString
方法。
您可以在此处找到有关如何操作的详细说明:
答案 1 :(得分:1)
您可以使用反射来打印属性值:How to recursively print the values of an object's properties using reflection
public void PrintProperties(object obj)
{
PrintProperties(obj, 0);
}
public void PrintProperties(object obj, int indent)
{
if (obj == null) return;
string indentString = new string(' ', indent);
Type objType = obj.GetType();
PropertyInfo[] properties = objType.GetProperties();
foreach (PropertyInfo property in properties)
{
object propValue = property.GetValue(obj, null);
if (property.PropertyType.Assembly == objType.Assembly)
{
Console.WriteLine("{0}{1}:", indentString, property.Name);
PrintProperties(propValue, indent + 2);
}
else
{
Console.WriteLine("{0}{1}: {2}", indentString, property.Name, propValue);
}
}
}
您可以使用反射:C# getting its own class name
this.GetType().Name
Selman22的解决方案是,如果您想真正控制打印内容的输出 - 如果您可以控制所有对象上的ToString,通常是更好的策略。