web-dev-qa-db-ja.com

C#エラー "...の型初期化子が例外をスローしました

このエラーは一部のコンピューターでのみ発生します。スタック情報を読み取ることにより、静的クラスでこの静的メソッド( "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)
34
Vytas

私はあなたのコードを試しました:

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タイプであるためです。

4
TheVillageIdiot

型初期化子の例外は、型を作成できなかったことを示します。これは通常、単にそのクラスを参照するときにメソッドを呼び出す直前に発生します。

あなたがここに持っているコードはあなたのタイプの完全なテキストですか?失敗する課題のようなものを探しています。これは、アプリの設定やその性質のものを取得する際によく見ます。

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

これは、型の静的コンストラクターでも確認できます。

いずれにせよ、このクラスにはもうありますか?

61
Anderson Imes

同じエラーが発生しましたが、私の場合はプラットフォームのターゲット設定の不一致が原因でした。 1つのライブラリは特にx86に設定されており、メインアプリケーションは「Any」に設定されていました。その後、開発をx64ラップトップに移行しました。

7
Kevin Morwood

Nlog構成ファイルを変更し、XMLを正しくフォーマットしなかったときにこのエラーが発生しました。

5
Jim McKeon

この問題は、クラスがweb.configに存在しないキーの値を取得しようとした場合に発生する可能性があります。

たとえば、クラスには静的変数ClientIDがあります

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

ただし、web.configに「GoogleCalendarApplicationClientID」キーが含まれていない場合、静的関数呼び出しまたはクラスインスタンスの作成時にエラーがスローされます

私は自分のコードでこのエラーを受け取りました。私の問題は、構成ファイルに重複したキーがあったことです。

1
jeb

存在しなくなったNLogターゲットにログを記録しようとすると、このエラーが発生しました。

1
Eternal21

Webサービスがある場合は、サービスを指す [〜#〜] url [〜#〜] を確認してください。 WebサービスのURLを変更すると、同様の問題が修正されました。

1
Jay Stratemeyer

これは、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
Thomas

私はこの問題を抱えていましたが、アンダーソン・イームズが言ったように、アプリの設定に関係していました。私の問題は、設定の1つが「アプリケーション」であるはずのときに「ユーザー」に設定されていたということでした。

0
TheMethod