web-dev-qa-db-fra.com

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

Cette erreur se produit uniquement sur certains ordinateurs. En lisant les informations de la pile, il y a un problème lorsque j'appelle cette méthode statique ("FormatQuery") dans une 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);
        }
    }

Donc quel est le problème? Comment le résoudre? Y a-t-il un problème avec la configuration du projet ou le mode de débogage ou quoi?

Informations sur l'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)
34
Vytas

J'ai essayé votre 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 jeté une exception à cette ligne:

foreach (DataRowView item in chekedListBox.CheckedItems)

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

Peut-être que vous êtes également confronté au même type de problème. Au lieu de convertir en DataRowView, essayez d'apporter les modifications suivantes:

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

Parce que les éléments de CheckedListBox sont de type objet .

4
TheVillageIdiot

Une exception d'initialisation de type indique que le type n'a pas pu être créé. Cela se produit généralement juste avant votre appel à votre méthode lorsque vous faites simplement référence à cette classe.

Le code que vous avez ici est-il le texte complet de votre type? Je chercherais quelque chose comme une mission qui échouerait. Je vois cela beaucoup avec l'obtention des paramètres d'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 des constructeurs statiques pour les types.

En tout cas, y a-t-il plus à cette classe?

61
Anderson Imes

J'ai eu la même erreur, mais dans mon cas, elle était due à un décalage dans les paramètres cibles de la plate-forme. Une bibliothèque a été définie spécifiquement sur x86 tandis que l'application principale a été définie sur "Any" ... puis j'ai déplacé mon développement vers un ordinateur portable x64.

7
Kevin Morwood

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

5
Jim McKeon

Ce problème peut se produire si une classe essaie d'obtenir la valeur d'une clé inexistante dans web.config.

Par exemple, la classe a une variable statique ClientID

private static string ClientID = System.Configuration.ConfigurationSettings.AppSettings["GoogleCalendarApplicationClientID"].ToString();

mais le web.config ne contient pas la clé "GoogleCalendarApplicationClientID", l'erreur sera renvoyée lors de tout appel de fonction statique ou de toute création d'instance de classe

4

J'ai eu cette erreur avec mon propre code. Mon problème était que j'avais des clés en double dans le fichier de configuration.

1
jeb

J'ai eu cette erreur en essayant de me connecter à une cible NLog qui n'existait plus.

1
Eternal21

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é l'URL de mon service Web.

1
Jay Stratemeyer

Cela peut être dû au fait que vous ne disposez pas des autorisations d'administrateur pour Oracle Client. Ajoutez ceci dans App.config fichier:

<IPermission class="Oracle.DataAccess.Client.OraclePermission,
 Oracle.DataAccess, Version=2.111.7.20, Culture=neutral,
 PublicKeyToken=89b483f429c47342" version= "1" Unrestricted="true"/>
1
Thomas

J'ai eu ce problème et comme Anderson Imes l'a dit, cela avait à voir avec les paramètres de l'application. Mon problème était que la portée d'un de mes paramètres était réglée sur "Utilisateur" alors qu'il aurait dû être "Application".

0
TheMethod