How to get the key of a Hashtable entry

c#, hashtable

Solution

Every item is a Key/Value pair of format DictionaryEntry

foreach (DictionaryEntry de in infopathFields)
        {        
            string fieldName = de.Key as string;         
                if (workflowProperties.Item.Fields.ContainsField(fieldName))        
                {           
                    workflowProperties.Item[fieldName] = infopathFields[fieldName];        
                }    
        }    

        workflowProperties.Item.Update();

Problem

I've got a hashtable that I want to update from a second hashtable. For any of the keys that match I want to copy the value over. The problem I have is when I enumerate the hashtable keys and try to cast each to a string I receive an exception about casting a Guid to a String. Well it's the string I want. When you use the index operator with something like hashtable["FirstName"] then I expect FirstName to be the key. It might use Guids underneath I guess but I need to get out the string for the key, the key value. ``` private void UpdateSharePointFromInfoPath(Hashtable infopathFields) { // Go through all the fields on the infopath form // Invalid Cast Exception Here foreach (String fieldName in infopathFields.Keys) { // If the same field is on sharepoint if (workflowProperties.Item.Fields.ContainsField(fieldName)) { // Update the sharepoint field with the new value from infopath workflowProperties.Item[fieldName] = infopathFields[fieldName]; } } // Commit the changes workflowProperties.Item.Update(); } ``` EDIT I don't create either of these hashtables. The keys have strings somewhere because I can put the field name in like the following and get the value of the field out. I'm trying to make a shorthand way of doing the following for every field: ``` workflowProperties.Item["FirstName"] = infopathFields["FirstName"]; workflowProperties.Item["LastName"] = infopathFields["LastName"]; workflowProperties.Item["Address"] = infopathFields["Address"]; workflowProperties.Item["DOB"] = infopathFields["DOB"]; ect... ``` EDIT It's been said that the hashtable uses Guids, but it also obviously has a string inside else I wouldn't be able to do infopathFields["FirstName"]. It's the value on the string I pass in there that I want.

Original source