查找对象内的对象计数

时间:2014-06-12 11:35:31

标签: c# linq generics

我有一个像这样调用的方法

var data = new List<string>{"foo", value};
var event = MakeEvents("module", new object[]{data, "Notes:", notes, "Date:", DateTime.Now);
在MakeEvents中,我使用foreach外观

分解objectData数组
foreach (var obj in objectData)
        {
            if (obj.ToString().Contains("List"))
                ev.data = SerialiseData((List<string>)obj);
            if (obj.GetType().ToString().Contains("System.DateTime"))
                ev.date = (DateTime)obj;
            if (obj.GetType().ToString().Contains("Boolean"))
                ev.is_deleted = (bool)obj;
            if (obj.GetType().ToString().Contains("Guid"))
                ev.parent_object_id = ((Guid)obj).ToString();
            if (obj.GetType().ToString() == "System.String")
            {
                var t = ((string)obj).Split(':').ToList();
                if (t.Count == 1)
                    ev.notes = (string)obj;
                else
                {
                    switch (t[0])
                    {
                        case "Notes":
                            ev.notes = t[1];
                            break;
                        case "Updated":
                            ev.updated_by = t[1];
                            break;
                        case "Parent":
                            ev.parent_object_id = t[1];
                            break;
                    }
                }
            }

我遇到的问题是对象中的第一个参数是List,但它没有被识别,但它确实给了我数据中对象数量的计数。

我尝试使用Enumerable.Count(obj)来获取数据中的数字对象,但是我给出了一个错误,即我将Enumerable与IEnumerable混合(方法系统的类型参数) .Linq.Enumerable.Count(此System.Collections.Generic.IEnumerable)无法从用法中推断出来。)

是否有一种从obj获取计数的简单方法?

1 个答案:

答案 0 :(得分:2)

您的条件是尝试匹配列表中调用ToString的结果。您应该使用is代替:

if (obj is List<string>) { ... }

同样适用于所有其他动态类型检查。