2011-09-12 4 views
0

私の.NETでrustyかもしれませんが、ここで私の問題を解決することはできません。System.NullReferenceException - ヘルプ

私は "null"例外をチェックしないため、エラーが発生することがわかりますが、なぜnullであるのかわかりません。

tNewObjFolder.cmdSetsはnullですがICollectionですので、Addを使用してその右にtNewObjCmdSetを追加できますか?

私はforeachの(*内のvar tCmdSets)を削除した場合、それは動作します(しかし、私はovislyだ第二のforeachを実行し、そこcmdSets.Add機能に何も追加してみたことがないためにしないでください...すべてのヘルプがにappriciatedさ

using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.ComponentModel.DataAnnotations; 
using System.Globalization; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Data; 
using System.Data.Entity; 
using System.Data.Objects; 


namespace imageController.Models 
{ 
public class settingsModels 
{ 
    public class objFolder 
    { 
     public decimal id { get; set; } 
     public string name { get; set; } 
     public string description { get; set; } 
     public string bulkDirectory { get; set; } 
     public ICollection<objCmdSet> cmdSets { get; set; } 
    } 
    public class objCmdSet 
    { 
     public decimal id { get; set; } 
     public string name { get; set; } 
     public string command { get; set; } 
     public string destination { get; set; } 
     public string filetype { get; set; } 
     public decimal? imageId { get; set; } 
     public decimal? folderId { get; set; } 
    } 
    public interface ISettingsService 
    { 
     List<objFolder> getFolders(); 
    } 
    public class settingsServices : ISettingsService 
    { 
     private settingsEntities _entities = new settingsEntities(); 

     public List<objFolder> getFolders() 
     { 
      ICollection<objFolder> tmpFolders = new Collection<objFolder>(); 

      foreach (var tFolders in _entities.IMG_SETTINGS_FOLDERS) 
      { 
       objFolder tNewObjFolder = new objFolder(); 
       tNewObjFolder.id = tFolders.SETTINGS_FOLDER_ID; 
       tNewObjFolder.name = tFolders.SETTINGS_FOLDER_NAME; 
       tNewObjFolder.description = tFolders.SETTINGS_FOLDER_DESCRIPTION; 
       tNewObjFolder.bulkDirectory = tFolders.SETTINGS_FOLDER_BULK; 

       foreach (var tCmdSets in _entities.IMG_SETTINGS_CMDSETS.Where("it.SETTINGS_FOLDER_ID = @folderid", new ObjectParameter("folderid",tFolders.SETTINGS_FOLDER_ID))) 
       { 
        objCmdSet tNewObjCmdSet = new objCmdSet(); 
        tNewObjCmdSet.id = tCmdSets.SETTINGS_CMDSET_ID; 
        tNewObjCmdSet.name = tCmdSets.SETTINGS_CMDSET_NAME; 
        tNewObjCmdSet.command = tCmdSets.SETTINGS_CMDSET_COMMAND; 
        tNewObjCmdSet.destination = tCmdSets.SETTINGS_CMDSET_DESTINATION; 
        tNewObjCmdSet.filetype = tCmdSets.SETTINGS_CMDSET_FILETYPE; 
        tNewObjCmdSet.imageId = tCmdSets.SETTINGS_IMAGETYPE_ID; 
        tNewObjCmdSet.folderId = tCmdSets.SETTINGS_FOLDER_ID; 
        tNewObjFolder.cmdSets.Add(tNewObjCmdSet); 
       } 
       tmpFolders.Add(tNewObjFolder); 
      } 
      return tmpFolders.ToList<objFolder>(); 
     } 
    } 
} 

}

+1

関連コードを投稿してください。 –

+0

cmdSetは空のインターフェイスなので、nullです。あなたはtempFoldersのような具体的なリストオブジェクトでそれを埋める必要があります。 –

答えて

1

あなたの問題は

tNewObjFolder.cmdSets.Add(tNewObjCmdSet); 
01 ...ここにあると思われます

cmdSetsコレクションをインストールしている場所はありません。

forループが表示されるように編集します。

if(tNewObjFolder.cmdSets == null) tNewObjFolder.cmdSets = new Collection<objCmdSet>(); 
tNewObjFolder.objFolder.Add(tNewObjCmdSet); 

や建設でコレクションを初期化するためにobjFolderクラスにコンストラクタを追加...

public objFolder() 
{ 
    cmdSets = new Collection<objCmdSet>(); 
} 
1

あなたはないnullに、空のコレクションに.Add()を使用することができます。 iDevForFunが示唆するように、あなたはそれらの2つのものを区別し、nullを扱わなければなりません。