2013-10-14 2 views
1

У меня есть следующие классы:Как я могу изменить значение на поля внутри коллекции, которая является частью объекта

public class Question { 
    public Question() { this.Answers = new List<Answer>(); } 
    public int QuestionId { get; set; } 
    public string Text { get; set; } 
    public virtual ICollection<Answer> Answers { get; set; } 
} 

public class Answer { 
    public int AnswerId { get; set; } 
    public string Text { get; set; } 
} 

У меня есть следующие, что кто-то предложил как способ проверки строк и удалить конец. Я положил это в метод, и это выглядит, как это сейчас:

public static string cleanQuestion(string text) 
    { 
     if (text == null) { return null; } 
     else { 
      return (Regex.Replace(text, "<p>&nbsp;</p>$", "")); 
     } 
    } 

Я знаю, как назвать этот метод на поле Текст для вопроса. Но как я могу вызвать метод на в каждом из полей текста ответа?

+1

Вы еще что-нибудь пробовали? – Andrew

ответ

0

Как об изменении собственности в собственность поля спинками:

public class Answer { 
    private string _text; 

    public int AnswerId { get; set; } 
    public string Text 
    { 
     get { return _text; } 
     set { _text = Class.cleanQuestion(value); } 
    } 
} 

где Class класс метод static включен.

Теперь, каждый раз, когда ответ получает Text, он будет очищен.

С другой стороны. Если вы хотитеText содержать неискупленного значение, за исключением в некоторых случаях, вы можете построить get недвижимость на Answer класса:

public string CleanText 
{ 
    get { return Class.cleanQuestion(this.Text); } 
} 
0

Вы пробовали следующее:

Question q = new Question(); 

    foreach (Answer ans in q.Answers) { 
     string cleanedText = cleanQuestion(ans.Text); 
    } 

Это приведет к повторению каждого из ответов в коллекции в объекте вопроса и вызовет метод с параметром текста ответа.

0

Я думаю, что было бы просто пройти через каждый Question:

foreach(Anser answer in question.Answers) 
    answer.Text = cleanQuestion(answer.Text); 

Однако, я хотел бы также сказать, что, возможно, вы должны добавить cleanQuestion() к Question класса как method. Таким образом, вы можете просто позвонить по номеру CleanQuestions(), и он будет проходить каждый ответ самостоятельно.

+0

Я думал об этом, но потом подумал, что я буду менять локальную копию ответа? Действительно ли это изменяет фактическое значение объекта вопроса? –

+0

Он изменит значение 'Text' в' Question'. Попробуй и посмотри! – Andrew

0

Если вы хотите сохранить оригинальные ответы:

Вопрос Класс:

public List<Answer> CleanAnswers { 
    get { 
     return Answers.Select(a => a.CleanText()).ToList(); 
    } 
} 

Ответ Класс:

public string CleanText() 
{ 
    if (this.Text == null) { return null; } 
    else { 
     return (Regex.Replace(this.Text, "<p>&nbsp;</p>$", "")); 
    } 
} 
0

Вы также можете пойти на метод расширения подхода будет более удобно.

public class Question 
{ 
    public Question() { this.Answers = new List<Answer>(); } 
    public int QuestionId { get; set; } 
    public string Text { get; set; } 
    public virtual ICollection<Answer> Answers { get; set; } 
} 

public static class TextExtension 
{ 
    public static string CleanQuestion(this Question @this) 
    { 
     if (@this.Text == null) { return null; } 
     else 
     { 
      return (Regex.Replace(@this.Text, "<p>&nbsp;</p>$", "")); 
     } 
    } 
} 


    // Usage: 
    Question q1= new Question(); 
    q1.CleanQuestion(); 
Смежные вопросы