无法将类型类型的对象强制转换为类型'System.String'

时间:2015-03-16 07:59:53

标签: c#

第1类

public class KlasaBetonaaaa
     {
         public string Naziv { get; set; }
         public double _Fck { get; set; }
     }

第2类

 public static class Database
     {
         public static KlasaBetonaaaa[] GetAllKlasaBetona()
         {
             return new KlasaBetonaaaa[]
             {
                 new KlasaBetonaaaa
                 {
                     Naziv = "C12/15",
                     _Fck = 12.0
                 };
             }
         }
     }

第3类

public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
            {

            var klaseBetona = Database.GetAllKlasaBetona();

            klasaBetonaComboBox.Items.AddRange(klaseBetona);

            }


private void klasaBetona_SelectedIndexChanged(object sender, EventArgs e)
        {
            var selectedBeton = klasaBetonaComboBox.SelectedItem;
            CalculateSomething((string)selectedBeton);
        }


        private void CalculateSomething(string selectedBeton)
        {
            fck.Text = selectedBeton;
        }
    }

此字符串selectedBeton是我之前尝试过的,只有一个名称从集合转换为字符串。 现在我创建了新的类(手动数据库)和数组,我不知道如何链接它,所以当我选择" C12 / 15"在标签中获得_Fck值15.0。

4 个答案:

答案 0 :(得分:2)

klasaBetonaComboBox.SelectedItem的类型为KlasaBetonaaaa,因为您添加了该类型的数组(klasaBetonaComboBox.Items.AddRange(klaseBetona);)。这意味着将SelectedItem投射到string将失败。

您应该将所选项目投射到KlasaBetonaaaa并使用Fck投射double属性ToString(或者如果您想要Naziv 1}}字符串属性,你不需要ToString(),因为它已经是一个):

KlasaBetonaaaaselectedBeton = klasaBetonaComboBox.SelectedItem;
CalculateSomething(selectedBeton.Fck.ToString());

答案 1 :(得分:1)

您似乎已使用IEnumerable<KlasaBetona>作为组合框的数据源。现在,您正在尝试将SelectedItemKlaseBetona的单个实例投射到string。这不起作用,因为你没有overloaded the explicit-conversion operator这样:

public static explicit operator string(KlasaBetona kl)  
{
    return kl._Fck.ToString();
}

但不是我建议将SelectedItem强制转换为KlasaBetona并首先使用该属性:

KlasaBetona kl = (KlasaBetona) selectedBeton;
CalculateSomething(kl._Fck.ToString());

答案 2 :(得分:0)

您需要转换为实际类型,然后显示_Fck字符串,您可以始终覆盖类的ToString方法并显示该方法。或者,如果您对对象进行计算,则可以将其传递给方法。

var selectedBeton = klasaBetonaComboBox.SelectedItem as KlasaBetonaaaa;
if(selectedBeton != null)
    CalculateSomething(selectedBeton._Fck.ToString());

答案 3 :(得分:0)

就我而言,当我使用JsonConverter序列化类时,收到了类似的消息Unable to cast object of type class to type Enum

最后,我发现我忘记删除字符串属性上的属性[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))],删除该属性后,问题就解决了。