C#在运行时切换对象类型

Dav*_*iov 4 .net c#

我有一个List<object>.我想循环遍历列表并以更友好的方式打印出值,而不仅仅是o.ToString()在某些对象是布尔值或日期时间等情况下.

你将如何构造一个我可以调用的函数MyToString(o)并返回一个正确格式化的字符串(由我指定)作为其实际类型?

wsa*_*lle 6

您可以在.NET 4.0中使用dynamic关键字,因为您正在处理内置类型.否则,你将使用多态.

例:

using System;
using System.Collections.Generic;

class Test
{
    static void Main()
    {
        List<object> stuff = new List<object> { DateTime.Now, true, 666 };
        foreach (object o in stuff)
        {
            dynamic d = o;
            Print(d);
        }
    }

    private static void Print(DateTime d)
    {
        Console.WriteLine("I'm a date"); //replace with your actual implementation
    }

    private static void Print(bool b)
    {
        Console.WriteLine("I'm a bool");
    }

    private static void Print(int i)
    {
        Console.WriteLine("I'm an int");
    }
}
Run Code Online (Sandbox Code Playgroud)

打印出来:

I'm a date
I'm a bool
I'm an int
Run Code Online (Sandbox Code Playgroud)