Ошибка C # "Инициализатор типа для ... выдал исключение - PullRequest
34 голосов
/ 04 августа 2009

Эта ошибка возникает только на некоторых компьютерах. При чтении информации стека возникает некоторая проблема, когда я вызываю этот статический метод («FormatQuery») в статическом классе:

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);
        }
    }

Итак, в чем проблема? Как мне это решить? Что-то не так с конфигурацией проекта или режимом отладки или как?

Информация об ошибке:

   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)

Ответы [ 11 ]

61 голосов
/ 29 октября 2009

Исключение инициализатора типа указывает, что тип не может быть создан. Обычно это происходит перед вызовом вашего метода, когда вы просто ссылаетесь на этот класс.

Является ли код, который у вас есть, полным текстом вашего типа? Я бы искал что-то похожее на провал. Я часто вижу это с настройками приложений и тому подобного.

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

Вы также можете увидеть это с помощью статических конструкторов для типов.

В любом случае, есть ли еще этот класс?

7 голосов
/ 29 октября 2012

У меня была такая же ошибка, но в моем случае она была вызвана несоответствием в настройках цели платформы. Одна библиотека была установлена ​​специально для x86, а основное приложение было установлено на «Any» ... и затем я перенес свою разработку на ноутбук x64.

5 голосов
/ 21 августа 2012

Я получил эту ошибку, когда изменил файл конфигурации Nlog и неправильно отформатировал XML.

4 голосов
/ 01 марта 2013

Эта проблема может возникнуть, если класс пытается получить значение несуществующего ключа в web.config.

Например, класс имеет статическую переменную ClientID

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

но web.config не содержит ключ 'GoogleCalendarApplicationClientID', тогда ошибка будет возникать при любом статическом вызове функции или создании экземпляра любого класса

4 голосов
/ 04 августа 2009

Я попробовал ваш код:

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();

В этой строке возникло исключение:

foreach (DataRowView item in chekedListBox.CheckedItems)

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

Может быть, вы тоже сталкиваетесь с такой же проблемой. Вместо приведения к DataRowView попробуйте внести следующие изменения:

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

Поскольку элементы в CheckedListBox имеют тип object .

1 голос
/ 09 апреля 2015

Это может быть вызвано отсутствием прав администратора для Oracle Client. Добавьте это в App.config файл:

<IPermission class="Oracle.DataAccess.Client.OraclePermission,
 Oracle.DataAccess, Version=2.111.7.20, Culture=neutral,
 PublicKeyToken=89b483f429c47342" version= "1" Unrestricted="true"/>
1 голос
/ 12 июня 2012

Я получил эту ошибку при попытке войти в цель NLog, которой больше не было.

1 голос
/ 31 августа 2011

Я получил эту ошибку с моим собственным кодом. Моя проблема заключалась в том, что у меня были дубликаты ключей в файле конфигурации.

1 голос
/ 02 февраля 2010

Если у вас есть веб-сервисы, проверьте URL , указывающий на сервис. У меня была проблема симуляции, которая была исправлена, когда я изменил URL своего веб-сервиса.

0 голосов
/ 12 февраля 2014

Эта ошибка была сгенерирована для меня из-за неправильно отформатированного файла NLog.config.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...