首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制转换匿名类型引发强制转换错误

强制转换匿名类型引发强制转换错误
EN

Stack Overflow用户
提问于 2011-12-27 23:20:19
回答 3查看 1.9K关注 0票数 1

在我的Global.asax文件中,我创建了一个包含匿名类型对象的数组列表

代码语言:javascript
复制
Application["userRecordsCountList"] = new ArrayList();

((System.Collections.ArrayList)Application["userRecordsCountList"]).Add(new { userCount = 12, logTime = DateTime.Now });

现在,在我的cs文件中,我有一个强制转换函数,如下所示

代码语言:javascript
复制
T Cast<T>(object obj, T type)
{
    return (T)obj;
}

现在,当我运行循环来迭代数据并提取数据集中的数据时,我得到一个错误,请参见代码

代码语言:javascript
复制
ArrayList countRecord = new ArrayList((System.Collections.ArrayList)Application["userRecordsCountList"]);

foreach (var item in countRecord)
    {
        dr = dt.NewRow();
        var record = Cast(item, new { userCount = "", logTime = "" });
        dr["Time"] = record.logTime;
        dr["Users"] = record.userCount;
        dt.Rows.Add(dr);
    }

错误是

代码语言:javascript
复制
Unable to cast object of type '<>f__AnonymousType0`2[System.Int32,System.DateTime]' to type '<>f__AnonymousType0`2[System.String,System.String]'.

请帮帮我..我已经尝试了我在stackoverflow或任何其他来源上找到的每种方法.

thnx

EN

回答 3

Stack Overflow用户

发布于 2011-12-27 23:22:20

不要使用匿名类型-使用您需要的实际类型。匿名类型只能在方法中使用-它们不能作为参数或返回类型传递,通常不适合序列化。

此外,您不应该使用ArrayList -它不是类型安全的。改用像List<T>这样的泛型集合。

票数 6
EN

Stack Overflow用户

发布于 2011-12-27 23:26:06

它们不是兼容的类型。错误消息给出错误。一个是具有intDateTime属性的匿名类型。第二个具有stringstring属性。

您只能强制转换为实际类型或基类,而匿名类型除了object之外没有其他基类,因此这是您唯一可以将其强制转换的对象。

这可能就是你想要的:

代码语言:javascript
复制
    dr = dt.NewRow();
    dr["Time"] = item.logTime.ToString();
    dr["Users"] = item.userCount.ToString();
    dt.Rows.Add(dr);

或者正如Oded所说,使用实数类型。

票数 0
EN

Stack Overflow用户

发布于 2011-12-27 23:58:44

在您的代码中演示的示例不是匿名类型的理想示例。对于方法级别的作用域,我更愿意使用匿名类型,最好是使用一些Linq。

虽然我同意为每个对象组合创建一个类/模型是很麻烦的。因此,在本例中,您可以考虑使用泛型Pair类,只需将DateTime和int存储在配对对象中即可。阅读here

所以,你的收藏会变成:

代码语言:javascript
复制
(List<Pair<int,DateTime>>Application["userRecordsCountList"]).Add(new Pair<int,DateTime>(12, DateTime.Now)); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8646224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档