I’m still trying to understand KeyValuePairs but I believe this idea should work. In my code below it searchs through a large string and extracts 2 substrings. One substring (keep in mind the value between the quotes varies) is something like Identity="EDN\username" another substring is something like FrameworkSiteID="Desoto" So I was thinking about combining these strings together before I added them to the List but here is my problem.. The login string below is a Unique field of strings that I need to use in a SQL statement to select records in SQLServer and the framew strings are strings I need lined up with the login strings (and all the columns and rows of data coming from SQLServer) when I output this to a text file. Should I make the login strings KEYS and the framew strings VALUES? If so how do I do that?? Hope that makes sense. I can further explain if needs be
Regex reg = new Regex("Identity=\"[^\"]*\"");
Regex reg1 = new Regex("FrameworkSiteID=\"[^\"]*\"");
foreach (FileInfo file in Files)
{
string line = "";
using (StreamReader sr = new StreamReader(file.FullName))
{
while (!String.IsNullOrEmpty(line = sr.ReadLine()))
{
if (line.ToUpper().Contains("IDENTITY="))
{
string login = reg.Match(line).Groups[0].Value;
string framew = reg1.Match(line).Groups[0].Value; //added
IdentityLines.Add(new KeyValuePair<string, string>(file.Name, login + " " + framew));
//This is probably not what I need
}
else
{
IdentityLines.Add(new KeyValuePair<string, string>(file.Name, "NO LOGIN"));
}
}
I’m note clear what the purpose of this is. You don’t seem to be using the KeyValuePairs as pairs of a Key and a Value. Are you using them as a general pair class? It’s a reasonable use (I do this myself), but I’m not sure what help you are seeking.
The intended purpose of KeyValuePair is as a helper-class in the implementation of Dictionaries. This would be useful if you are going to look up values based on having a key, though it doesn’t seem from your explanation that you are.
Why are you using the filename as the key? Does it matter?
I also don’t see why you are loading all of this stuff into a list. Why not just yield them out and use them as they are found?
On the other hand, if you do want to use them as key-d values:
Now logins[login] returns the related framew. If you want this to be case-insensitive then use
new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)ornew Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase)as appropriate.Finally, are you sure there will be no blank likes until the end of the file? If there could be you should use
line != nullrather than!string.IsNullOrEmpty()to avoid stopping your file read prematurely.