C# 哈希表编译错误(缺少转换?)

C# 哈希表编译错误(缺少转换?),c#,casting,hashtable,C#,Casting,Hashtable,我正在我的应用程序中创建一个功能,它将重新创建CTRL+Z。我有几个文本框,我做了一张这样的桌子: hashtable textChanges[obj.Name,obj.Text]=新的hashtable(50) 我在从chossen键中提取值时遇到问题。钥匙扣响后我会拿到钥匙 在事件中,我寻找具有焦点的控件,并使用其名称提取他进入表时的最后一个值 这是事件代码: private void Form1_KeyDown(object sender, KeyEventArgs e) {

我正在我的应用程序中创建一个功能,它将重新创建CTRL+Z。我有几个文本框,我做了一张这样的桌子:

hashtable textChanges[obj.Name,obj.Text]=新的hashtable(50)

我在从chossen键中提取值时遇到问题。钥匙扣响后我会拿到钥匙

在事件中,我寻找具有焦点的控件,并使用其名称提取他进入表时的最后一个值

这是事件代码:

 private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyData == Keys.Z)
        {
            for (int i = 0; i < this.Controls.Count; i++)
            {
                if (this.Controls[i].Focused)
                {
                    if (this.Controls[i].GetType() == typeof(TextBox))
                    {
                        TextBox obj = (TextBox)this.Controls[i];
                        obj.Text = textChanges[obj.Name]; // <--- compile error
                       //Cannot implicitly convert type 'object' to 'string'. An explicit conversion exists (are you missing a cast?)   

                    }
                }
            }
        }
    }
为什么我会错过一个强制转换错误


(对不起我的英语)

您需要将其转换为字符串。如果你用字典会更好。Dictionary是泛型类型,您不需要哈希表所需的类型转换<代码>哈希表存储对象类型,您需要将对象类型转换回所需类型

obj.Text = textChanges[obj.Name].ToString();

您需要将其转换为字符串。如果你用字典会更好。Dictionary是泛型类型,您不需要哈希表所需的类型转换<代码>哈希表存储对象类型,您需要将对象类型转换回所需类型

obj.Text = textChanges[obj.Name].ToString();

是的,你需要打字

<>但是考虑重构你的代码。用户而不是哈希表:

Dictionary<string, string> textChanges = new Dictionary<string, string>(50);
Dictionary textChanges=新字典(50);
并使用Linq检索聚焦文本框:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyData == Keys.Z)
    {
        foreach (var textBox in Controls.OfType<TextBox>().Where(x => x.Focused))
            textBox.Text = textChanges[textBox.Name];
    }
}
private void Form1\u KeyDown(对象发送方,KeyEventArgs e)
{
if(e.Control&&e.KeyData==Keys.Z)
{
foreach(Controls.OfType()中的var textBox,其中(x=>x.Focused))
textBox.Text=textChanges[textBox.Name];
}
}

是的,您需要类型转换

<>但是考虑重构你的代码。用户而不是哈希表:

Dictionary<string, string> textChanges = new Dictionary<string, string>(50);
Dictionary textChanges=新字典(50);
并使用Linq检索聚焦文本框:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyData == Keys.Z)
    {
        foreach (var textBox in Controls.OfType<TextBox>().Where(x => x.Focused))
            textBox.Text = textChanges[textBox.Name];
    }
}
private void Form1\u KeyDown(对象发送方,KeyEventArgs e)
{
if(e.Control&&e.KeyData==Keys.Z)
{
foreach(Controls.OfType()中的var textBox,其中(x=>x.Focused))
textBox.Text=textChanges[textBox.Name];
}
}

但obj.Name不是返回字符串吗?哈希表存储的对象不是您最好使用的类型字典,哦,好的,我现在就知道了。当10分钟的wair结束时,我会给你正确的答案。但是obj.Name不是返回字符串吗?哈希表存储的对象不是你最好使用的类型字典,哦,好的,我现在知道了thx。10分钟后我会给你一个正确的答案。你为什么还在用哈希表?包括
字典
在内的泛型集合7年前问世,让生活变得相当美好……我认为泛型在XP上不起作用。我在工作吗?仅供参考——
TextBox
RichTextBox
也是,它的属性包括
Name
Text
。通过
CTRL-Z操作
,你是指撤销功能吗<代码>哈希表不一定维持顺序。您可能需要使用
堆栈来按顺序弹出每个事件。您可以在WinXP上运行.net 4.0。泛型是在2.0中引入的。没有什么理由避免使用.net 2.0功能。有什么理由您仍在使用
哈希表
?包括
字典
在内的泛型集合7年前问世,让生活变得相当美好……我认为泛型在XP上不起作用。我在工作吗?仅供参考——
TextBox
RichTextBox
也是,它的属性包括
Name
Text
。通过
CTRL-Z操作
,你是指撤销功能吗<代码>哈希表
不一定维持顺序。您可能需要使用
堆栈来按顺序弹出每个事件。您可以在WinXP上运行.net 4.0。泛型是在2.0中引入的。没有什么理由避免使用.NET2.0功能。