第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。
答案 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>
作为组合框的数据源。现在,您正在尝试将SelectedItem
(KlaseBetona
的单个实例投射到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))]
,删除该属性后,问题就解决了。