如何访问词典项?

时间:2010-06-07 12:44:07

标签: c# dictionary visual-studio-2008

我正在开发一个C#VS2008 / SQL Server网站应用程序,并且是Dictionary类的新手。你能告诉你最好的方法吗?这是一段代码:

SqlConnection conn2 = new SqlConnection(connString);
SqlCommand cmd = conn2.CreateCommand();
cmd.CommandText = "dbo.AppendDataCT";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn2;
SqlParameter p1, p2, p3;
foreach (string s in dt.Rows[1].ItemArray)
{
    DataRow dr = dt.Rows[1]; // second row
    p1 = cmd.Parameters.AddWithValue((string)dic[0], (string)dr[0]);
    p1.SqlDbType = SqlDbType.VarChar;
    p2 = cmd.Parameters.AddWithValue((string)dic[1], (string)dr[1]);
    p2.SqlDbType = SqlDbType.VarChar;
    p3 = cmd.Parameters.AddWithValue((string)dic[2], (string)dr[2]);
    p3.SqlDbType = SqlDbType.VarChar;
}

但是这给了我编译器错误:

The best overloaded method match for 'System.Collections.Generic.Dictionary<string,string>.this[string]' has some invalid arguments

我只想从“dic”访问每个值并加载到这些SQL参数中。我该怎么做呢?我必须输入密钥吗?键被命名为“col1”,“col2”等,因此不是最方便用户的。还有其他提示吗?谢谢!

6 个答案:

答案 0 :(得分:8)

Dictionary将一种类型的对象映射到另一种类型的对象。在你的情况下,你有一个Dictionary<string, string>。所以,如果你有这样的初始化:

Dictionary<string, string> dic = new Dictionary<string, string>()
{
   { "key1", "value1" },
   { "key2", "value2" },
   { "key3", "value3" }
};

您可以通过

获取key2的值
dic["key2"]; // gives "value2"

Dictionary是强类型的,所以不需要任何强制转换。正如Jon Skeet所说,你可能会在这里找到List<string>。您可以通过整数索引访问它们。

答案 1 :(得分:6)

您似乎试图通过整数索引访问Dictionary<string, string>。你不能这样做 - 你必须通过键查找值,这是一个字符串。

如果您不想使用字符串键,为什么要使用Dictionary<string, string>开头?您可以使用List<string>还是Dictionary<int, string>

请注意,一旦 设法适当地使用索引器,您就不需要转换为字符串。

答案 2 :(得分:3)

这是一段能够完成你所追求的代码,我认为......你必须添加一个else语句,但它应该让你开始。

public void AttachParam(ref DbCommand command, Dictionary<string, string> parameters)
{
  try
  {
     if (parameters.Count > 0)
     {
        foreach (KeyValuePair<string, string> kvp in parameters)
        {
           command.Parameters.AddWithValue(kvp.Key, kvp.Value);
        }
     }
  }
  catch (Exception ex)
  {
     throw;
  }
}

答案 3 :(得分:1)

如果你的密钥是“col1”,“col2”等,那么使用0,1等将导致你得到的错误。试试这个:

p1 = cmd.Parameters.AddWithValue(dic["col1"], dr[0]);
p1.SqlDbType = SqlDbType.VarChar;
p2 = cmd.Parameters.AddWithValue(dic["col2"], dr[1]);
p2.SqlDbType = SqlDbType.VarChar;
p3 = cmd.Parameters.AddWithValue(dic["col3"], dr[2]);
p3.SqlDbType = SqlDbType.VarChar;

此外,无需转换为string,因为字典对象已经返回字符串。

答案 4 :(得分:1)

我无法理解你在寻找什么,所以这是我的小建议。 有一种方法可以通过不按键请求项目来浏览字典。这是一个foreach选项。

foreach (KeyValuePair<string,string> pair in dic)
{
    p. = cmd.Parameters.AddWithValue(dic.Value /*or dic.Key*/, (string)dr[0]);
    p.SqlDbType = SqlDbType.VarChar;
    // further processing of this parameter
}

答案 5 :(得分:0)

必须通过密钥访问是的值。