C# 强制转换匿名类型将引发强制转换错误

C# 强制转换匿名类型将引发强制转换错误,c#,asp.net,casting,type-conversion,C#,Asp.net,Casting,Type Conversion,在我的Global.asax文件中,我创建了一个包含匿名类型对象的数组列表 Application["userRecordsCountList"] = new ArrayList(); ((System.Collections.ArrayList)Application["userRecordsCountList"]).Add(new { userCount = 12, logTime = DateTime.Now }); 现在在我的cs文件中,我有一个casting函数,如下所示 T Ca

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

Application["userRecordsCountList"] = new ArrayList();

((System.Collections.ArrayList)Application["userRecordsCountList"]).Add(new { userCount = 12, logTime = DateTime.Now });
现在在我的cs文件中,我有一个casting函数,如下所示

T Cast<T>(object obj, T type)
{
    return (T)obj;
}
错误是

Unable to cast object of type '<>f__AnonymousType0`2[System.Int32,System.DateTime]' to type '<>f__AnonymousType0`2[System.String,System.String]'.
无法将类型为“f_uAnonymousType0`2[System.Int32,System.DateTime]”的对象强制转换为类型为“f_uAnonymousType0`2[System.String,System.String]”。
请帮帮我。。我已经尝试了在stackoverflow或任何其他来源上找到的所有方法


thnx

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


此外,您不应该使用
ArrayList
——它不是类型安全的。请使用类似于
列表的泛型集合。

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


此外,您不应该使用
ArrayList
——它不是类型安全的。请改用类似于
列表的泛型集合。

它们是不兼容的类型。错误消息给出了错误信息。一种是具有
int
DateTime
属性的匿名类型。第二个属性是
string
string

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

这可能是您想要的:

    dr = dt.NewRow();
    dr["Time"] = item.logTime.ToString();
    dr["Users"] = item.userCount.ToString();
    dt.Rows.Add(dr);

或者正如奥德所说,使用真实类型。

它们是不兼容的类型。错误消息给出了错误信息。一种是具有
int
DateTime
属性的匿名类型。第二个属性是
string
string

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

这可能是您想要的:

    dr = dt.NewRow();
    dr["Time"] = item.logTime.ToString();
    dr["Users"] = item.userCount.ToString();
    dt.Rows.Add(dr);

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

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

虽然我同意为每个对象组合创建一个类/模型是很麻烦的。因此,在您的情况下,可以考虑使用泛型对类,只是在配对对象中存储DATETIME和INT。阅读

因此,您的收藏将成为:

(List<Pair<int,DateTime>>Application["userRecordsCountList"]).Add(new Pair<int,DateTime>(12, DateTime.Now)); 
(ListApplication[“userrecordscontlist”])。添加(新的一对(12,DateTime.Now));

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

虽然我同意为每个对象组合创建一个类/模型是很麻烦的。因此,在您的情况下,可以考虑使用泛型对类,只是在配对对象中存储DATETIME和INT。阅读

因此,您的收藏将成为:

(List<Pair<int,DateTime>>Application["userRecordsCountList"]).Add(new Pair<int,DateTime>(12, DateTime.Now)); 
(ListApplication[“userrecordscontlist”])。添加(新的一对(12,DateTime.Now));

您读过留言了吗?您的类型错误。您的方法的签名/代码是什么
Cast()
?@SLaks这不是问题所在…运行代码并检查它。您是否阅读了错误消息?这就是问题所在。我甚至试着给出相同的类型。。。。错误保持不变…您读过邮件了吗?您的类型错误。您的方法的签名/代码是什么
Cast()
?@SLaks这不是问题所在…运行代码并检查它。您是否阅读了错误消息?这就是问题所在。我甚至试着给出相同的类型。。。。错误仍然是一样的…戴维,你所说的情况并不是真正的错误。。。请运行代码并检查您所说的情况是否不是确切的错误。。。请运行代码并检查OHK,我会尽量不使用它。但我真的很想知道这个问题的解决方案!!!!哦,我会尽量不使用它…但我真的很想知道这个问题的解决方法!!!!