我想将列表中的第一个属性(例如5)更改为这样的字符串:“”->(这只是一个空格)。我希望列表中的这个特定条目为空...
以下代码导致错误:
“从类型“字符串”到“双精度”的隐式转换不是 可能”
我的代码:
var mylist = new List<myclass>();
// ...
var obj = mylist.FirstOrDefault(x => x.myproperty == this.myproperty);
if (obj != null) obj.myproperty = " ";
我的班级
class myclass
{
public int laufzeit { get; set; }
public double myproperty { get; set; }
public double darlehensbetrag { get; set; }
}
答案 0 :(得分:1)
您不能在数字字段中存储空格,但是可以使班级足够聪明,以至于有时显示数字,有时显示空格。
class myclass
{
public bool ShowSpace { get; set; }
public double myproperty { get; set; }
public override ToString()
{
return this.ShowSpace ? " " : this.myproperty.ToString();
}
}
答案 1 :(得分:0)
错误消息指出,您不会将string
值" "
分配给double
属性。这是不可能的,因为string
永远不会是double
。 string
可以用来显示 double
,但它仍然是string
,只是看起来就像{{1 }}。
但是,这样的字符串可以转换为双精度字符:
double
请注意,如果无法将string numberString = "5.7";
double number = double.Parse(numberString);
转换成double形式,例如,上面的代码段将引发异常。当字符串为numberString
时。
您要尝试的是在运行时更改属性的 Type 。这是不可能的,因为c#是强类型语言。您不能有一个看起来像这样的课程
" "
然后在运行时神奇地转换为
class Foo
{
double Bar {get; set;}
}
您可以使用class Foo
{
string Bar {get; set;}
}
或object
作为dynamic
的类型来绕过此操作,但我强烈建议不这样做。因为是绕过了使用类型的整个想法。在这种情况下,您永远不会知道,Bar
是Bar
还是double
。
我不是很明白,为什么为什么,但是我认为这看起来是一个糟糕的设计,也许其他解决方案是合适的。