C# 非invocable Hashtable.keys成员不能用作方法
我正在用c#创建一个小的Windows应用程序,当我想在strored过程中添加值时,我使用哈希表遇到了这个错误。 错误: “非invocable Hashtable.keys成员不能用作方法” 错误出现在hs.键(n)之后 这是我正在写的代码: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.
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
)。