C#错误“types初始值设定项…抛出exception

此错误仅在某些计算机上发生。 通过读取堆栈信息,在静态类中调用此静态方法(“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); } } 

所以有什么问题? 我如何解决它? 项目configuration或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) 

我试过你的代码:

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

它在这条线上抛出一个exception:

 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中的项目是对象types的。

types初始值设定项例外表示无法创buildtypes。 当您简单地引用该类时,通常会在调用您的方法之前发生。

你在这里的代码是你的types的完整文本? 我会寻找像分配失败的东西。 我通过获取应用程序设置和这种性质看到了很多。

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

你也可以看到这个types的静态构造函数。

无论如何,这个class还有什么?

我有同样的错误,但在我的情况下,这是由平台目标设置不匹配造成的。 一个库专门设置为x86,而主应用程序设置为“任何”…然后我将我的开发移到一台x64笔记本电脑上。

如果某个类尝试获取web.config不存在的键的值,则可能会出现此问题。

例如,类有一个静态variablesClientID

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

web.config不包含'GoogleCalendarApplicationClientID'键,那么将会在任何静态函数调用或任何类实例创build时抛出错误

当我修改一个Nlogconfiguration文件并且没有正确地格式化XML时,我得到了这个错误。

我用自己的代码得到了这个错误。 我的问题是我在configuration文件中有重复的键。

尝试login到不再存在的NLog目标时出现此错误。

如果您有Web服务,请检查指向该服务的URL 。 我有一个类似的问题,当我更改我的Web服务URL时,这个问题已经修复。

这可能是由于没有Oracle Clientpipe理员权限。 将其添加到App.config文件中:

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

我有这个问题,像安德森·艾姆斯说,它必须做的应用程序设置。 我的问题是我的一个设置的范围被设置为“用户”,当它应该是“应用程序”。

这个错误是由于我有一个格式不正确的NLog.config文件而产生的。