C# 在C中如何将字典TKey和TValue逐个传递给方法

C# 在C中如何将字典TKey和TValue逐个传递给方法,c#,dictionary,tuples,hashset,C#,Dictionary,Tuples,Hashset,我有一本代码为的字典: SqlCommand query = con.CreateCommand(); query.CommandText = @"select pid, p_title from sub_aminer_paper where pid IN (/*a long list of Pid's*/)"; SqlDataReader reader = query.ExecuteReader(); Dictionary<int, string> paper_title = n

我有一本代码为的字典:

SqlCommand query = con.CreateCommand();
query.CommandText = @"select pid, p_title from sub_aminer_paper where pid IN (/*a long list of Pid's*/)";
SqlDataReader reader = query.ExecuteReader();

Dictionary<int, string> paper_title = new Dictionary<int, string>();   
paper_title.Add(Convert.ToInt32(reader["pid"]), reader["p_title"].ToString() );
我想将字典TKey和TValue传递给要在哈希集中调用的方法,如下所示:

但是这行代码给出了一些无效参数的错误。 方法p.calculate_CSstring,string接受两个string类型的参数。我必须从行中提取一个字符串,从字典中提取一个字符串,即论文标题。Tuple的第三个参数是int类型,它将是Dictionary中的键


请在这方面提供帮助。谢谢

根据评论中的讨论,我认为您的代码应该是

  var similarity = new HashSet<Tuple<string, double, int>>();
    foreach(var key in paper_title.Keys){
        similarity.Add(lines.Select(line => Tuple.Create(line,
   p.calculate_CS(line, paper_title[key]), key))); 
    }

此代码将遍历字典中的每个键,并使用适当的属性调用calculate_CS方法。

可以使用以下方法将TKey和TValue逐个传递给方法:

Dictionary<int, string> paper_title = new Dictionary<int, string>(); 
paper_title.Add(Convert.ToInt32(reader["pid"]), reader["p_title"].ToString() );
var similarity = new HashSet<Tuple<string, double, int>>();
foreach(KeyValuePair<int, string> item in paper_title)
{
    similarity.UnionWith(lines.Select(line => Tuple.Create(line, p.calculate_CS(line, item.Value), item.Key))); 
}

你能展示一下calculate_CS方法的代码吗?如果你想传递三个参数,为什么要创建两个参数的方法?您只需在方法的签名中添加一个其他参数,然后在方法中使用该参数method@MuhammadAdeelZahid方法p.calculate_CSstring,string有两个参数,而p.calculate_CSstring,string本身是三个参数中的第二个参数Tuple@MuhammadAdeelZahid参数的数量不是问题,问题是如何在第三个参数paper\u title.Selectitem=>item.Key方法calculate中使用字典键和值。键不会给出一个整数值。除了它会给你一个IEnumerable的整数,代表dictionary@MuhammadAdeelZahid-我曾经使用Union而不是现在添加它的优点,但一个问题是在p.calculate\u CS方法中不需要论文标题[key]。我需要这个方法中字符串类型的key的值,因为calculate_CS方法的参数是string,string@MuhammadAdeelZahid-你们的回答很好,但唯一的问题是我需要那个把钥匙的价值,而不是纸上的标题[钥匙]
  var similarity = new HashSet<Tuple<string, double, int>>();
    foreach(var key in paper_title.Keys){
        similarity.Add(lines.Select(line => Tuple.Create(line,
   p.calculate_CS(line, paper_title[key]), key))); 
    }
Dictionary<int, string> paper_title = new Dictionary<int, string>(); 
paper_title.Add(Convert.ToInt32(reader["pid"]), reader["p_title"].ToString() );
var similarity = new HashSet<Tuple<string, double, int>>();
foreach(KeyValuePair<int, string> item in paper_title)
{
    similarity.UnionWith(lines.Select(line => Tuple.Create(line, p.calculate_CS(line, item.Value), item.Key))); 
}