如何从C#中的KeyValuePair <k,t>打印信息?</k,t>

时间:2014-11-29 21:10:20

标签: c# generics keyvaluepair

我有KeyValuePair<K,T>的列表。我想从T打印详细信息,但我不知道它的类型是为了进行演员表。例如,T中存储的值可以是StudentPersonMovie等,我想打印出这些信息。假设我有p as KeyValuePair,我尝试p.Value.ToString(),但它只打印出类型。有没有办法做到这一点?

2 个答案:

答案 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,通常是更好的策略。