С# Ошибка "Инициализатор типа для... выбросил исключение
Эта ошибка возникает только на некоторых компьютерах. Читая информацию о стеке, возникает некоторая проблема, когда я вызываю этот статический метод ( "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);
}
}
Итак, в чем проблема? Как это решить? Что-то не так с режимом конфигурации проекта или режима debbuging или что?
Информация об ошибке:
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)
Ответы
Ответ 1
Я пробовал ваш код:
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 имеют тип объекта.
Ответ 2
Исключение инициализатора типа указывает, что тип не может быть создан. Это будет происходить обычно прямо перед вызовом вашего метода, когда вы просто ссылаетесь на этот класс.
Есть ли у вас код, полный текст вашего типа? Я бы искал что-то вроде задания, чтобы потерпеть неудачу. Я вижу это много с получением настроек приложения и вещей такого характера.
static class RHelper
{
//If this line of code failed, you'd get this error
static string mySetting = Settings.MySetting;
}
Вы также можете увидеть это со статическими конструкторами для типов.
В любом случае, есть ли еще этот класс?
Ответ 3
У меня была такая же ошибка, но в моем случае это было вызвано несоответствием в целевых настройках платформы. Одна библиотека была установлена специально для x86, в то время как основное приложение было настроено на "Any"... а затем я переместил мою разработку на ноутбук x64.
Ответ 4
Я получил эту ошибку, когда я модифицировал файл конфигурации Nlog и не форматировал XML правильно.
Ответ 5
Эта проблема может возникнуть, если класс пытается получить значение несуществующего ключа в web.config
.
Например, класс имеет статическую переменную ClientID
private static string ClientID = System.Configuration.ConfigurationSettings.AppSettings["GoogleCalendarApplicationClientID"].ToString();
но web.config
не содержит ключ "GoogleCalendarApplicationClientID", тогда ошибка будет передана на любой вызов статической функции или создание экземпляра класса
Ответ 6
Если у вас есть веб-службы, проверьте URL, указывающий на услугу. У меня была симулятивная проблема, которая была исправлена, когда я изменил URL-адрес веб-службы.
Ответ 7
Я получил эту ошибку с моим собственным кодом. Моя проблема заключалась в том, что у меня были дубликаты ключей в файле конфигурации.
Ответ 8
У меня возникла эта ошибка при попытке войти в цель NLog, которая больше не существовала.
Ответ 9
Это может быть вызвано отсутствием прав администратора для 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"/>
Ответ 10
У меня была эта проблема, и, как Андерсон Имес сказал, что это связано с настройками приложения. Моя проблема заключалась в том, что для одной из моих настроек было установлено значение "Пользователь", когда это должно было быть "Приложение".
Ответ 11
Эта ошибка была создана для меня с помощью некорректно отформатированного файла NLog.config.