将列表中的对象转换为字符串

时间:2019-03-29 10:25:00

标签: c# list object

我想将列表中的第一个属性(例如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; }      
}

2 个答案:

答案 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永远不会是doublestring可以用来显示 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的类型来绕过此操作,但我强烈建议这样做。因为是绕过了使用类型的整个想法。在这种情况下,您永远不会知道,BarBar还是double

我不是很明白,为什么为什么,但是我认为这看起来是一个糟糕的设计,也许其他解决方案是合适的。

相关问题