将值设置为主类[副]的子类

问题描述 投票:0回答:2

这个问题在这里已有答案:

我正在努力为居住在StorageFile内的MainFolderDisplay设定价值。但问题是我像吼叫一样异常。我在做什么错了?

System.NullReferenceException:'对象引用未设置为对象的实例。'

pic

控制器:

var mainFolder = new MainFolderDisplay();

mainFolder.StorageFile.Add(new StorageFile
{
    AwsUniqueFileName = "asasas",
    FileId = 0,
    FolderType = 0,
    RelatedFolderId = 0,
    UserDisplayFileName = "",
    UserId = 0,
});

模型:

using Test.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Test.ViewModels
{
    public class MainFolderDisplay
    {
        public int MainFolderId { get; set; }
        public string MainFolderName { get; set; }
        public int UserId { get; set; }

        public List<SubFolder> SubFolders { get; set; }
        public List<StorageFile> StorageFile { get; set; }
    }

    public class SubFolderDisplay
    {
        public int SubFolderId { get; set; }
        public string SubFolderName { get; set; }
        public int MainFolderId { get; set; }
        public List<StorageFile> StorageFile { get; set; }
    }

    public class StorageFileDisplay
    {

        public int FileId { get; set; }
        public string AwsUniqueFileName { get; set; }
        public string UserDisplayFileName { get; set; }
        public int UserId { get; set; }
        public int FolderType { get; set; }
        public int RelatedFolderId { get; set; }
    }
}
c#
2个回答
0
投票

在使用之前,您的“StorgaeFile”属性未初始化:

    var mainFolder = new MainFolderDisplay();

    mainFolder.StorageFile = new List<StorageFile>
    {
        new StorageFile
        {
            AwsUniqueFileName = "asasas",
            FileId = 0,
            FolderType = 0,
            RelatedFolderId = 0,
            UserDisplayFileName = "",
            UserId = 0,
        }
    };

更好的方法是更改​​“MainFolderDisplay”类实现来处理初始化:

public class MainFolderDisplay
{
    private List<StorageFile> _storageFile;

    public int MainFolderId { get; set; }
    public string MainFolderName { get; set; }
    public int UserId { get; set; }

    public List<StorageFile> StorageFile
    {
        get => _storageFile ?? (_storageFile = new List<StorageFile>());
        set => _storageFile = value;
    }
}

现在使用它而不用担心:

 mainFolder.StorageFile.Add(
            new StorageFile
            {
                AwsUniqueFileName = "asasas",
                FileId = 0,
                FolderType = 0,
                RelatedFolderId = 0,
                UserDisplayFileName = "",
                UserId = 0,
            });

1
投票

StorageFile列表未初始化。

mainFolder.StorageFile = new List<StorageFile>();

我建议将此属性重命名为StorageFiles以暗示它是一个集合。

mainFolder.StorageFiles = new List<StorageFile>();
© www.soinside.com 2019 - 2024. All rights reserved.