#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
и astring
?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. большое спасибо, я думаю, вы правы, другое решение — лучший способ. Я думал, что смогу легко ввести это единственное поле в свой список и просто изменить его тип.