如何更改作为对象一部分的集合内的字段的值

时间:2013-10-14 12:02:05

标签: c# collections

我有以下课程:

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>$", ""));
        }
    } 

我知道如何在问题的文本字段上调用此方法。但我怎么能打电话给这个方法 每个答案文本字段?

5 个答案:

答案 0 :(得分:0)

如何将属性更改为字段支持的属性:

public class Answer {
    private string _text;

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

其中Classstatic方法所在的类。

现在,每当答案得到Text时,它都会被清除。

另一方面。如果想要 Text包含未清除的值,则在某些情况下,您可以在get类上构建Answer属性:< / p>

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

答案 1 :(得分:0)

您是否尝试过以下操作:

    Question q = new Question();

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

这将在问题对象中对集合中的每个答案进行检查,并使用答案文本的参数调用该方法。

答案 2 :(得分:0)

我认为只需浏览每个Question

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

但是,我也想说,您可以将cleanQuestion()作为Question添加到method课程中。通过这种方式,您只需拨打CleanQuestions(),就可以自行查看每个答案。

答案 3 :(得分: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>$", ""));
    }
} 

答案 4 :(得分: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();