4 votes

Comment obtenir la clé d'une entrée de Hashtable ?

J'ai une table de hachage que je veux mettre à jour à partir d'une seconde table de hachage. Pour toutes les clés qui correspondent, je veux copier la valeur. Le problème que j'ai est que lorsque j'énumère les clés de la table de hachage et que j'essaie de les convertir en chaîne, je reçois une exception concernant la conversion d'un Guid en chaîne. Or, c'est la chaîne que je veux. Lorsque vous utilisez l'opérateur d'indexation avec quelque chose comme hashtable["FirstName"], je m'attends à ce que FirstName soit la clé. Il est possible d'utiliser des Guids en dessous, je suppose, mais j'ai besoin de sortir la chaîne pour la clé, la valeur de la clé.

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 Je ne crée aucun de ces hashtables. Les clés ont des chaînes quelque part, car je peux entrer le nom du champ comme suit et obtenir la valeur du champ. J'essaie de trouver une façon abrégée de faire ce qui suit pour chaque champ :

workflowProperties.Item["FirstName"] = infopathFields["FirstName"];
workflowProperties.Item["LastName"] = infopathFields["LastName"];
workflowProperties.Item["Address"] = infopathFields["Address"];
workflowProperties.Item["DOB"] = infopathFields["DOB"];
ect...

EDIT Il a été dit que la table de hachage utilise des Guids, mais il est évident qu'elle contient aussi une chaîne de caractères, sinon je ne pourrais pas faire infopathFields["FirstName"]. C'est la valeur de la chaîne que je passe à l'intérieur que je veux.

0voto

HEMANT KUMAR Points 1

Pour obtenir la plus grande clé entière de la table de hachage :

public class Example
{
    public void hashTableMethod()
    {
        Hashtable ht = new Hashtable();
        ht.Add(5002894, "Hemant Kumar");
        ht.Add(5002895, "Himanshee Ratnakar");
        ht.Add(5002896, "Pooja Bhatnagar");
        ht.Add(5002897, "Hina Saxena");
        ht.Add(5002898, "Kanika Aneja");
        ht.Add(5002899, "Hitesh Chaudhary");

        Console.Write("\nNumber of Key-Value pair elements in HashTable are : {0}",ht.Count);
        Console.WriteLine("Elements in HashTable are: ");
        ICollection htkey = ht.Keys;
        foreach (int key in htkey)
        {
            Console.WriteLine("{0}. {1}",key,ht[key]);
        }
        string ch="n";
        do
        {
            Console.Write("\n\nEnter the name to check if it is exist or not, if not then it will add: ");
            string newName=Console.ReadLine();
            if(ht.ContainsValue(newName))
            {
                Console.Write("\nYour Name already Exist in the list!!");
            }
            else
            {
                Console.Write("\nSorry that name doesn't exist but it will be added!!");
                int getKey = 0;

                int[] htk= new int[ht.Count];
                ht.Keys.CopyTo(htk,0);

                string[] val=new string[ht.Count];
                ht.Values.CopyTo(val,0);

                Array.Sort(htk,val);
                foreach (int id in htk)
                {
                    getKey = id;  
                }
                ht.Add(getKey+1,newName);
            }
            Console.Write("\nDo you want to search more??(y/n) :");
            ch=Console.ReadLine();
        }while(ch=="y"||ch=="Y");

        Console.Write("\nNew List Items: \n");
        ICollection htkeys = ht.Keys;
        foreach (int key in htkeys)
        {
            Console.WriteLine("{0}. {1}",key,ht[key]);
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X