使用相同类型的对象时生成的转换异常

Dav*_*ell 5 .net c# asp.net dictionary

我以前使用静态变量来保存我想在回发之间保存的变量数据.我遇到了问题,发现当appdomain结束时,这些变量中的数据会丢失.所以我做了一些研究并决定选择ViewStates:

static Dictionary<string, linkButtonObject> linkButtonDictonary;


protected void Page_Load(object sender, EventArgs e)
{
    if (ViewState["linkButtonDictonary"] != null)
    {
        linkButtonDictonary = (Dictionary<string, linkButtonObject>)ViewState["linkButtonDictonary"];
    }
    else
    {
        linkButtonDictonary = new Dictionary<string, linkButtonObject>();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我使用的非常简单的类:

[Serializable]
public class linkButtonObject
{
    public string storyNumber { get; set; }
    public string TaskName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在添加到linkBut​​tonDictionary,因为gridview是数据绑定:

protected void hoursReportGridView_OnRowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        LinkButton btn = (LinkButton)e.Row.FindControl("taskLinkButton");
        linkButtonObject currentRow = new linkButtonObject();
        currentRow.storyNumber = e.Row.Cells[3].Text;
        currentRow.TaskName = e.Row.Cells[5].Text;
        linkButtonDictonary.Add(btn.UniqueID, currentRow);
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎我之前的问题已得到解决,但新的问题已经出现.有时当我回发时,我收到此错误:

[A] System.Collections.Generic.Dictionary 2[System.String,linkButtonObject] cannot be cast to [B]System.Collections.Generic.Dictionary2 [System.String,linkBut​​tonObject].类型A源自位于'C:\ Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0'上下文'LoadNeither'中的'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' .0__b77a5c561934e089\mscorlib.dll中".类型B源自'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'在上下文'LoadNeither'位置'C:\ Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0 .0__b77a5c561934e089\mscorlib.dll中".

当我到处使用同一个类时,我不明白怎么会有一个转换问题.我做错了什么,我该如何解决?

Dav*_*ell 4

感谢大家的意见,它帮助我找到了问题。

我在 .aspx.cs 页面中有一个简单的类:

[Serializable]
public class linkButtonObject
{
    public string storyNumber { get; set; }
    public string TaskName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这就是程序集加载两次并导致问题的原因。