如何将对象集合添加到对象变量集合中?

时间:2015-05-12 15:52:43

标签: c# asp.net collections nested nullreferenceexception

我在一个对象旁边有一个嵌套集合:

public class Question
{   
    public AnswerObjectCollection Answers
    {
        get;
        private set;
    }
}

当我尝试在AnswerObjectCollection对象中添加Question的答案时,我得到以下异常:

  

对象引用未设置为对象的实例

Question currQuestion = new Question();
currQuestion.Answers.AddRange(GetAnswersByQuestion(currQuestion.QuestionIdentity));

如果我首先尝试创建答案对象(哪个确实有效),我无法添加

AnswerObjectCollection answer = new AnswerObjectCollection();
answer.AddRange(GetAnswersByQuestion(currQuestion.QuestionIdentity));
currQuestion.Answers.AddRange(answer);

如果我尝试映射对象,我不会收到错误,但currQuestion.Answers变量为空

Mapper.CreateMap(typeof(AnswerObjectCollection), typeof(AnswerObjectCollection));
Mapper.CreateMap(typeof(Answer), typeof(Answer));
Mapper.Map(answer, currQuestion.Answers);

3 个答案:

答案 0 :(得分:0)

您需要在Question

中添加构造函数
public class Question {
    public Question() {
       Answers = new AnswerObjectCollection();
    }
    public AnswerObjectCollection Answers {
        get;
        private set;
    }
}

这将实例化您的Answers属性。

答案 1 :(得分:0)

这很简单:

通过调用

创建"dd.MM.yyyy HH:mm:ss.SSS'000'"
public static void main(String[] args) throws ParseException {
    printDate("dd.MM.yyyy HH:mm:ss.SSS");//02.05.2010 21:45:58.073
    printDate("dd.MM.yyyy HH:mm:ss.SSSSSS");//02.05.2010 21:45:58.000073
    printDate("dd.MM.yyyy HH:mm:ss.SSS'000'");//02.05.2010 21:45:58.073000
    printDate("dd.MM.yyyy HH:mm:ss.'000000'");//02.05.2010 21:45:58.000000

    tryToParseDate("dd.MM.yyyy HH:mm:ss.SSS");//good
    tryToParseDate("dd.MM.yyyy HH:mm:ss.SSSSSS");//good
    tryToParseDate("dd.MM.yyyy HH:mm:ss.SSS'000'");//bad
    tryToParseDate("dd.MM.yyyy HH:mm:ss.'000000'");//good
}

private static void printDate(String formatString) {
    Date now = new Date();
    SimpleDateFormat format = new SimpleDateFormat(formatString);
    String formattedDate = format.format(now);

    // print that date
    System.out.println(formattedDate);
}

private static void tryToParseDate(String formatString) {
    Date now = new Date();
    SimpleDateFormat format = new SimpleDateFormat(formatString);
    String formattedDate = format.format(now);

    // try to parse it again
    try {
        format.parse(formattedDate);
        System.out.println("good");
    } catch (ParseException e) {
        System.out.println("bad");
    }
}

您必须创建Question

的实例
Question currQuestion = new Question();

它会起作用。

或者将其添加到您的代码中:

AnswerObjectCollection

答案 2 :(得分:0)

未初始化属性Answers。在构建类Question

时,您需要执行此操作
public Question()
{
    Answers = new AnswerObjectCollection();
}

默认情况下,所有属性和字段都将初始化为默认值(default(T))。对于参考属性(和字段),默认值为null,因此您遇到了NullReferenceException的原因。

类似的问题,

AnswerObjectCollection answer = new AnswerObjectCollection();
answer.AddRange(GetAnswersByQuestion(currQuestion.QuestionIdentity));

这里只是创建一个单独的变量,与类Answers的属性Question无关。因此,当你这样做时,

currQuestion.Answers.AddRange(answer);

你遇到了和以前一样的问题。

两者都可以通过在构造函数中初始化属性来修复。