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

时间:2015-11-25 12:16:44

标签: c# dictionary tuples hashset

我在代码中有一个Dictionary

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() );

lines字符串读取为文本文件:

var lines = System.IO.File.ReadLines(@"D:\~\research_fields.txt");

我想将字典TKey和TValue传递给HashSet中要调用的方法:

var similarity = new HashSet<Tuple<string, double, int>>();
similarity.Add(lines.Select(line => Tuple.Create(line, p.calculate_CS(line, paper_title.Select(item => item.Value).ToString()), paper_title.Select(item => item.Key))));  

但是这行代码给出了一些无效参数的错误 方法p.calculate_CS(string, string)采用类型为string的两个参数。我必须从string中获取一个lines,从Dictionary中获取一个字符串,即paper_titleTuple的第三个参数类型为int,它是来自Key的{​​{1}}。

请帮助这方面。谢谢!

2 个答案:

答案 0 :(得分:0)

从评论中的讨论中,我认为您的代码应该类似于

def tell_me(self):
    print self.name
    print 'all I contain is' 
    for item in self:
        print item

此代码将遍历字典中的每个键,并使用适当的属性调用 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))); } 方法。

答案 1 :(得分:0)

可以使用以下方法逐个传递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))); 
}