C# 非invocable Hashtable.keys成员不能用作方法

C# 非invocable Hashtable.keys成员不能用作方法,c#,hashtable,C#,Hashtable,我正在用c#创建一个小的Windows应用程序,当我想在strored过程中添加值时,我使用哈希表遇到了这个错误。 错误: “非invocable Hashtable.keys成员不能用作方法” 错误出现在hs.键(n)之后 这是我正在写的代码: public int EscribirBackup(string nombre, Hashtable hs) { SqlCommand cm = new SqlCommand(); cm.

我正在用c#创建一个小的Windows应用程序,当我想在strored过程中添加值时,我使用哈希表遇到了这个错误。 错误: “非invocable Hashtable.keys成员不能用作方法”

错误出现在hs.键(n)之后

这是我正在写的代码:

public int EscribirBackup(string nombre, Hashtable hs)
        {
            SqlCommand cm = new SqlCommand();
            cm.CommandType = CommandType.StoredProcedure;
            cm.CommandText = nombre;
            for (var n = 0; n <= hs.Values.Count - 1; n++)
                cm.Parameters.AddWithValue(hs.Keys(n), hs.Values);
            cm.Connection = ABRIR("NORMAL");
            int i = cm.ExecuteNonQuery();
            CERRAR();
            return i;
        }
on int i=cm.ExecuteNonQuery()

是一个集合属性(属于
System.Collections
)具有以下定义:

public virtual System.Collections.ICollection Keys { get; } 
请注意,属性不公开索引器,您应该将其转换为其他公开索引器的集合

因此,您应该首先使用
Cast()
将其转换为数组或
列表
实例,然后使用方括号访问指定索引,如下例所示:

var keys = hs.Keys.Cast<string>().ToArray();
var values = hs.Values.Cast<string>().ToArray();

for (var n = 0; n <= hs.Values.Count - 1; n++)
{
    cm.Parameters.AddWithValue(keys[n], values[n]);
}
var keys=hs.keys.Cast().ToArray();
var values=hs.values.Cast().ToArray();
for(var n=0;n是具有以下定义的集合属性(System.Collections
的成员):

public virtual System.Collections.ICollection Keys { get; } 
请注意,属性不公开索引器,您应该将其转换为其他公开索引器的集合

因此,您应该首先使用
Cast()
将其转换为数组或
列表
实例,然后使用方括号访问指定索引,如下例所示:

var keys = hs.Keys.Cast<string>().ToArray();
var values = hs.Values.Cast<string>().ToArray();

for (var n = 0; n <= hs.Values.Count - 1; n++)
{
    cm.Parameters.AddWithValue(keys[n], values[n]);
}
var keys=hs.keys.Cast().ToArray();
var values=hs.values.Cast().ToArray();

对于(var n=0;n您不想要
hs.Keys[n]
而不是
hs.Keys(n)
?如果我这样更改它,则会出现下一个错误:您无法使用[]应用索引对于ICollection类型的表达式,您到底想做什么?
Keys
是哈希表中键的
ICollection
。您不能以这种方式仅获取一个键;您必须将键转换为数组。在哈希表中循环
值是没有意义的。Count
times,尝试添加一个
,但每次都添加所有
…您不想使用
hs.Keys[n]
而不是
hs.Keys(n)
?如果我这样更改,则会出现下一个错误:您无法使用[]对于ICollection类型的表达式,您到底想做什么?
Keys
是哈希表中键的
ICollection
。您不能以这种方式仅获取一个键;您必须将键转换为数组。在哈希表中循环
值是没有意义的。Count
times,尝试添加单个
,但每次都添加所有
…嗨!我尝试了你给我的解决方案,但是,当我运行应用程序时,出现了下一个错误:“没有将对象类型System.Collections.Hashtable+ValueCollection分配给已知托管提供程序的本机类型。”我真的不知道我在做什么发生的情况:(出现了什么错误?请编辑问题以提供错误详细信息。我将问题添加到原始问题中,我发现在对键和值使用
ToArray()
ToList()
之前,应先强制转换它(请参阅),因此被编辑为直接提供字符串数组而不是
hs.Values
。嗨!我尝试了u给我的解决方案,但是,当我运行应用程序时,出现了下一个错误:“没有将对象类型System.Collections.Hashtable+ValueCollection分配给已知托管提供程序的本机类型。”我真的不知道发生了什么g:(您遇到了什么错误?请编辑问题以提供错误详细信息。我将问题添加到原始问题中,我发现在对键和值使用
ToArray()
ToList()
之前,您应该先进行强制转换(请参见),因此编辑以提供字符串数组,而不是直接使用
hs.values
)。