Преобразование объекта из списка в строку

#c# #list #object

#c# #Список #объект

Вопрос:

Я хочу изменить свое первое свойство в списке, которое, например, равно 5, на строку, подобную этой: » » —> (что это просто пробел). Я хочу, чтобы эта конкретная запись списка была пустой…

Приведенный ниже код вызывает ошибку:

«Неявное преобразование из типа «string» в «double» невозможно»

Мой Код:

 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; }      
}
  

Комментарии:

1. Не могли бы вы рассказать нам, каков тип данных списка?

2. Вы хорошо понимаете разницу между double и a string ?

3. Вопрос в том, почему вы хотите записать строку » » в свой «myproperty»? Вы просто хотите «обнулить» его?

4. Также возможно обнуление, я создаю представление datagrid с моим списком, и в первой строке я хочу изменить значение свойства

5. Хорошо, если это a, double чего вы ожидаете, когда пытаетесь назначить его пробелу " " ? Каков ожидаемый результат? Является ли пробел числом?

Ответ №1:

Вы не можете сохранить пробел в числовом поле, но вы можете сделать свой класс достаточно умным, чтобы иногда отображать число, а иногда и пробел.

 class myclass
{
    public bool ShowSpace { get; set; }

    public double myproperty { get; set; }

    public override ToString()
    {
        return this.ShowSpace ? " " : this.myproperty.ToString();
    }
}
  

Ответ №2:

Как указано в сообщении об ошибке, вы не хотите присваивать string значение " " double свойству. Это невозможно, поскольку a string никогда не является double . string Можно использовать для отображения a double , но это все равно a string , который просто выглядит как a double .

Однако такая строка может быть преобразована в double:

 string numberString = "5.7";
double number = double.Parse(numberString);
  

Обратите внимание, что приведенный выше фрагмент вызовет исключение, если numberString не может быть преобразован в double, например, когда строка " " .

Вы пытаетесь изменить тип свойства во время выполнения. Это невозможно, поскольку c # является строго типизированным языком. У вас не может быть класса, который выглядит как

 class Foo
{
    double Bar {get; set;}
}
  

а затем волшебным образом преобразуется во время выполнения в

 class Foo
{
    string Bar {get; set;}
}
  

Вы могли бы обойти это, используя object или dynamic , как тип Bar , но я настоятельно рекомендую не делать этого. Поскольку это обходит саму идею использования типов. В таком случае вы никогда не знаете, что является Bar a double или a string .

Я действительно не понимаю, зачем вам это нужно, но, на мой взгляд, это выглядит плохим дизайном и, возможно, подойдет другое решение.

Комментарии:

1. большое спасибо, я думаю, вы правы, другое решение — лучший способ. Я думал, что смогу легко ввести это единственное поле в свой список и просто изменить его тип.