【问题标题】:Finding the object count within an object查找对象中的对象计数
【发布时间】:2014-08-02 17:11:58
【问题描述】:

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

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 混合在一起(System.Linq.Enumerable.Count 方法的类型参数(此 System.Collections.Generic.IEnumerable)无法从用法中推断出来)。

有没有简单的方法从obj中获取计数?

【问题讨论】:

  • 第一个 if 语句应该是 if (obj.ToString().Contains("List")) 还是 if (obj.GetType().ToString().Contains("List"))?
  • 你应该使用if obj is bool而不是尝试匹配类型的名称。
  • 您的类型检查真的很脆弱。使用正确的类型检查

标签: c# linq generics


【解决方案1】:

您的条件正在尝试匹配在列表中调用ToString 的结果。你应该改用is

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

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

【讨论】:

  • 谢谢 - 也感谢所有其他 cmets。非常感谢。
  • 尽管如此,数据并没有被识别为 List 但是当在调试器中查看时我看到 objData[2],然后在循环 obj[3] 和 obj[0 ] 是列表 - 但不显示为列表,而是显示为数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多