【发布时间】: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而不是尝试匹配类型的名称。 -
您的类型检查真的很脆弱。使用正确的类型检查