34 votes

C # Error "L'initialiseur de type pour ... a levé une exception

J'ai besoin d'aide avec cette erreur. Cette erreur ne se produit que sur certains ordinateurs. En lisant les informations de pile, il y a un problème lorsque j'appelle cette méthode statique ("FormatQuery") en classe statique:

 using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using FlexCel.Report;
using FlexCel.XlsAdapter;
using ComboBox=System.Windows.Forms.ComboBox;

namespace XSoftArt.A
{
    static class RHelper
    {
        private static string FormatQuery(string FieldName, int Count,
            CheckedListBox chekedListBox)
        {
            string ID = string.Empty;
            int n = Count;

            foreach (DataRowView item in chekedListBox.CheckedItems)
            {
                ID = ID + item["" + FieldName + ""];
                if (n > 1)
                {
                    ID = ID + " , ";
                    n--;
                }
            }
            return ID;
        }

        public static string FormatQuery(CheckedListBox chekedListBox)
        {
            return FormatQuery(chekedListBox.ValueMember,
                chekedListBox.CheckedItems.Count, chekedListBox);
        }
    }
 

Alors, quel est le problème ..? Je ne comprends pas comment le résoudre. Est-ce que quelque chose ne va pas avec la configuration du projet ou le mode débogage ou quoi?

Informations d'erreur:

    at XSoftArt.EVS.ReportHelper.FormatQuery(CheckedListBox chekedListBox)
   at XSoftArt.EVS.NewEmailSelectClient.LoadList_v2(String search, TextBox txtbox)
   at XSoftArt.EVS.NewEmailSelectClient.LoadContacts()
   at XSoftArt.EVS.NewEmailSelectClient.button7_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
 

61voto

Anderson Imes Points 18093

Un Initialiseur de Type exception indique que le type ne pouvait pas être créé. Ce serait se produit généralement juste avant votre appel à votre méthode lorsque vous simplement référence à cette classe.

C'est le code que vous avez ici le texte complet de votre type? Je serais à la recherche de quelque chose comme une cession à l'échec. Je vois cela beaucoup avec l'obtention des paramètres de l'application et des choses de cette nature.

static class RHelper
{
     //If this line of code failed, you'd get this error
     static string mySetting = Settings.MySetting;
}

Vous pouvez également voir cela avec les constructeurs statiques pour les types.

En tout cas, est-il un plus pour cette classe?

7voto

Kevin Morwood Points 71

J'ai eu la même erreur, mais dans mon cas, cela était dû à une non concordance dans les paramètres de la cible de la plateforme. Une bibliothèque a été définie spécifiquement sur x86 alors que l'application principale a été définie sur 'N'importe lequel' ... et ensuite j'ai déplacé mon développement sur un ordinateur portable x64.

5voto

Jim McKeon Points 931

J'ai eu cette erreur lorsque j'ai modifié un fichier de configuration Nlog et que le format XML n'a pas été correctement formaté

4voto

TheVillageIdiot Points 22158

J'ai essayé ton code:

    CheckedListBox cb = new CheckedListBox();
   for (var i = 1; i < 11; i++)
      cb.Items.Add("Item " + i, i % 3 == 0);

   string fmt = RHelper.FormatQuery(cb);
   Console.WriteLine(fmt);
   Console.ReadLine();
 

Il a lancé une exception à la ligne:

    foreach (DataRowView item in chekedListBox.CheckedItems)

  Unable to cast object of type 'System.String' to type 
    'System.Data.DataRowView'.
 

Peut-être vous êtes également confrontés au même genre de problème. Au lieu de transtyper vers DataRowView, essayez d’apporter les modifications suivantes:

      foreach (var item in chekedListBox.CheckedItems)
     {
         ID = ID + item.ToString();// item["" + FieldName + ""];
 

parce que les éléments dans CheckedListBox sont de type objet

1voto

Jay Stratemeyer Points 11

Si vous avez des services Web, vérifiez votre URL pointant vers le service. J'ai eu un problème similaire qui a été résolu lorsque j'ai changé mon URL de service Web.

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