当前位置:  开发笔记 > 编程语言 > 正文

将对象转换为通用列表

如何解决《将对象转换为通用列表》经验,为你挑选了2个好方法。

我有一个要求,我可以在一个对象中获得以下内容 -

a type T or List 

将对象转换为T很容易.如何将其转换为List(通过首先检查它是否可以成功转换),我想要转换的原因是滚动列表并在每个元素上调用tostring.

我的实际代码 -

namespace Generic_Collection_Code
{
    class Program
    {
        public static string DumpObj(object obj)
        {
            string sTemp = String.Empty;

            List ints = obj as List;
            if (ints != null)
            {
                foreach (int i in ints)
                    sTemp += i.ToString() + ",";
                sTemp.Trim(',');
            }
            else 
            {
                List strings = obj as List;
                if (strings != null)
                {
                    foreach (string s in strings)
                        sTemp += s + ",";
                    sTemp.Trim(',');
                }
                else
                {
                    sTemp += obj.ToString();
                }
            }
            return sTemp;
        }
        static void Main(string[] args)
        {
            List listInts = new List();
            listInts.Add(1);
            listInts.Add(2);
            listInts.Add(3);

            Console.WriteLine("Object1: {0}", DumpObj(listInts));
            int i = 90;

            Console.WriteLine("Object2 {0}", DumpObj(i));


            List listStrings = new List();
            listStrings.Add("1");
            listStrings.Add("2");
            listStrings.Add("3");

            Console.WriteLine("Object3: {0}", DumpObj(listStrings));
            Console.ReadKey();
        }
    }
}

上面的代码有效,但我知道这是一种难以实现的方法.我想从社区问我怎么能有这样的功能 -

    public static string DumpObj(object obj)
    {
        string sTemp = String.Empty;

        List list = obj as List;
        if (list != null)
        {
            foreach (T i in list)
                sTemp += i.ToString() + ",";
            sTemp.Trim(',');
        }
        return sTemp;
    }

这给了我编译错误,因为我必须在调用DumpObj时指定T,错误为 -

错误1无法从用法中推断出方法'Generic_Collection_Code.Program.DumpObj(object)'的类型参数.尝试显式指定类型参数.D:\ DotNet\Generic_Collection_Code\Generic_Collection_Code\Program.cs 57 47 Generic_Collection_Code

正如你所看到的,obj是一个对象,我在调用dumobj时不知道它的类型.

我希望我已经明确表达了这一点.

我感谢你的时间!

关心阿米特



1> Charlie Flow..:

List genericList = object as List;

if(genericList != null)
{
   // Do the loop
}

"as"关键字验证"对象"实际上是"is-a"List .如果是这样,您将从中获得List .如果没有,你会得到null.



2> Dave..:

你得到的编译错误是什么?如果在上下文中将T声明为泛型类型参数,那么我可以在该语句中看到的唯一编译时问题是使用关键字object作为变量名.无论如何,我建议这样做最能表达你的意图:

IEnumerable enumerable = obj as IEnumerable;

if (enumerable != null)
{
    foreach (object item in enumerable)
    {
        sTemp += item.ToString();
    }
}

如果您的列表可能包含大量项目,您可能还需要考虑使用StringBuilder.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有