我有一个像这样调用的方法
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获取计数的简单方法?
答案 0 :(得分:2)
您的条件是尝试匹配列表中调用ToString
的结果。您应该使用is
代替:
if (obj is List<string>) { ... }
同样适用于所有其他动态类型检查。