【问题标题】:C# - text to double conversion throws System.TypeInitializationExceptionC# - 文本到双重转换抛出 System.TypeInitializationException
【发布时间】:2015-12-12 09:51:39
【问题描述】:

所以我有 2 个类,一个叫 DataTypes.cs,一个叫 Doelen.xaml.cs

代码DataTypes.cs:

//Doelen
    public static double Omzet = 0;
    public static double Marge = 0;
    public static double NieuweKlanten = 0;

    //capaciteit
    public static double cUurPWeek = 0;
    public static double cUurPWeekSF = 0;
    public static double cPercTot = 0;

    //saleskit
    public static int skProspects = 0;
    public static int skHotProspects = 0;
    public static int afsMak = 0;
    public static int afs = 0;
    public static int offMak = 0;
    public static int gescOff = 0;
    public static int newKlant = 0;

    //conversie
            public static double convPHP = (Convert.ToDouble(skHotProspects / skProspects)) * 100;
    public static double convHPAM = (Convert.ToDouble(afsMak / skHotProspects)) * 100;
    public static double convAMA = (Convert.ToDouble(afs / afsMak)) * 100;
    public static double convAOM = (Convert.ToDouble(offMak / afs)) * 100;
    public static double convOMGO = (Convert.ToDouble(gescOff / offMak)) * 100;
    public static double convGONK = (Convert.ToDouble(newKlant / gescOff)) * 100;

代码 Doelen.xaml.cs:

private void btnNext_Click(object sender, RoutedEventArgs e)
{
    DataTypes.Omzet = Convert.ToDouble(txxOmzetMaand.Text);
    DataTypes.Marge = Convert.ToDouble(txxMargeMaand.Text);
    DataTypes.NieuweKlanten = Convert.ToDouble(txxNieuwKlantMaand.Text);
}

代码 Doelen.xaml

<StackPanel x:Name="datFieldMnd" Orientation="Vertical" Margin="0,15,10,0">
<TextBox x:Name="txxOmzetMaand" TextWrapping="Wrap" Width="40px" Height="20px" Margin="0,7,0,0"/>
<TextBox x:Name="txxMargeMaand" TextWrapping="Wrap" Width="40px" Height="20px" Margin="0,7,0,0"/>
<TextBox x:Name="txxNieuwKlantMaand" TextWrapping="Wrap" Width="40px" Height="20px" Margin="0,7,0,0"/>
</StackPanel>

当我点击 btnNext 时,它会抛出这个异常:

System.TypeInitializationException 未处理 消息:SalesKicker2.exe 中出现“System.TypeInitializationException”类型的未处理异常 附加信息:“SalesKicker2.DataTypes”的类型初始化程序引发了异常。

我在这里做错了什么?

我也看了这个问题:WPF Type initialization Exception in C#。但是这个问题的答案根本没有帮助。一个人甚至说他要创建一个新项目,这就是我不打算做的。而且我还尝试导入以下包:

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Windows;

这并没有改变任何事情。

那么,再一次,有人可以帮助我吗?

提前致谢!

【问题讨论】:

  • 不确定,但我认为它是重复的。
  • 不,这只是复制品
  • 您的 XAML 文件中没有任何错误?
  • 不,我的 XAML 根本没有

标签: c# wpf xaml exception


【解决方案1】:

所有这些初始化器:

public static double convPHP = (skHotProspects / skProspects) * 100;
public static double convHPAM = (afsMak / skHotProspects) * 100;
public static double convAMA = (afs / afsMak) * 100;
public static double convAOM = (offMak / afs) * 100;
public static double convOMGO = (gescOff / offMak) * 100;
public static double convGONK = (newKlant / gescOff) * 100;

会抛出一个DivideByZeroException

我认为您的意思是使用属性,而不是字段。例如

public static double ConvPHP { get { return (skHotProspects / skProspects) * 100; } }

或在 C# 6 中

public static double ConvPHP => (skHotProspects / skProspects) * 100;

如果你在skProspects为0时尝试获取值,这些仍然会抛出异常,但类型可以正确初始化。

您也应该将其他字段更改为属性并添加验证以确保您永远不会尝试除以 0。或者在除以之前检查值并返回一些常量而不是除以 0

public static double ConvPHP 
{ 
    get 
    { 
        if (skProspects == 0) return 0;
        return (skHotProspects / skProspects) * 100; 
    } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2014-06-20
    • 1970-01-01
    相关资源
    最近更新 更多