リスト<Color>

I have a model with a List, as I mentioned, which comes to use in the Seed() like this:

    protected override void Seed(DatabaseContext context)
    {
        var somethings = new List
        {
            new Something
            {
                Name="blah blah", Colors= { Color.Black, Color.Red }
            }
        };
    }

And as long as I have the Colors over there like that, I always recieve Object reference not set to an instance of an object. at line var somethings = new List.

を削除すると、消えてすべてが完全に動作します。原因は何ですか?この問題をどのように解決できますか?

ありがとう。

編集:

何かのモデル:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;

namespace MVCApplication7
{
    public class Something
    {
        public int SomethingID { get; set; }
        public string Name { get; set; }
        public List Colors { get; set; }
    }
}

コントローラ:

    ........
    private DatabaseContext db = new DatabaseContext();

    //
   //GET: /Home/

    public ViewResult Index()
    {
        return View(db.Somethings.ToList());
    }

View: (I'm sure it's irrelavent because the debugger shows the Colors is empty.

        @foreach (var itemColor in item.Colors)
        {
            Html.Raw(itemColor.ToString());
        }

Global.asax

    .........
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        Database.SetInitializer(new DatabaseInitializer());
    }
0

2 答え

Colors プロパティを空のリストに設定せずに何かコンストラクタが返ってくる可能性があります。コレクションの初期化子は、 Colors.Add(Color.Black)を呼び出してから Colors.Add(Color.Red)をクリックするだけです。 プロパティがnull参照を返しています。

Either set it to an empty list to start with (e.g. in the constructor) or create a new list and set the property itself:

new Something
{
    Name = "blah blah",
    Colors = new List { Color.Black, Color.Red }
}

It's important that you understand the difference between the above code and your original. Your code is currently equivalent to (within the List collection initializer):

Something tmp = new Something();
tmp.Name = "blah blah";
tmp.Colors.Add(Color.Black);
tmp.Colors.Add(Color.Red);
// Now add tmp to the list we're building.

上記の私のコードは次のものと同等です:

Something tmp = new Something();
tmp.Name = "blah blah";
List tmp2 = new List();
tmp2.Add(Color.Black);
tmp2.Add(Color.Red);
tmp.Colors = tmp2;
// Now add tmp to the list we're building

違いを見ます?

3
追加された
さて、私はこれらのことを学んでいるだけですが、Global.asaxを Application_Start で渡したと思います。 Database.SetInitializer (new DatabaseInitializer()); これはあなたが意味することですか?
追加された 著者 MasterMastic,
はい、www.asp.netで私はいくつかのガイドに従っていましたが、それは同じです(確かめるためにもう一度確認しますが)。私はあなたの理解にもなったので、 SetInitializer の の部分はそうするだろうと考えました。とにかく私は、あなたの助けを多く​​のおかげで確認します!
追加された 著者 MasterMastic,
私は私が愚かであることを予測することができたので、すみません。しかし、実際には何もしないことはわかりません。私が理解していることは、Global.asaxで、 Database.SetInitializer を使用するとロードします(無視しないでください)。なぜそれが無視されているのか、どうすればこの問題を解決できるのか説明してください。
追加された 著者 MasterMastic,
質問を更新しました(最初の投稿)
追加された 著者 MasterMastic,
追加された 著者 MasterMastic,
私はそれを構築した直後に、それは色を持っています!コンテキスト内に Colors だけを追加したり保存したりするようなことはありません! Name は何の問題もなくそこに到着します。私は何かのコードを投稿したいですか?
追加された 著者 MasterMastic,
foreach Itemのモデルの中のビューにそれらを渡して、 item.Colors [0] などと書くだけです。 Zero21xxxを他の回答で推奨した後、私はこのメッセージをもう受信しません。リストはヌルではありませんが、空です。コードを実行しようとすると、インデックスが範囲外であると表示されます。デバッガをチェックしたところ、 ColorsCount は0でした。あなたが私に助けを求めるために必要なものを指定していない場合は、あなたが求めている情報かどうかは分かりません。ありがとう
追加された 著者 MasterMastic,
まあ、イニシャライザはいいですね、( Colors =新しいリスト {Color.Black、Color.Red} )、そして例えば内部のビューに書き込もうとすると最初の色を取得するためにforeachループ @ item.Colors [0] を使用すると、前と同じエラーが表示されます。オブジェクト参照がオブジェクトのインスタンスに設定されていませんデバッガはforeachの "item"の Colors 特性がnullであることを示します。
追加された 著者 MasterMastic,
回答してくれてありがとう、私はそれをテストし、例えば最初の色を表示しようとするが、私はその時点でもう問題を与えない、私は同じエラーメッセージが表示されます。もちろん、デバッガは "Colors"プロパティがnullであることを示しています。皆さんがコードをもっと必要としている場合は、私に本当に混乱していることを教えてください。
追加された 著者 MasterMastic,
@ケン:できれば問題を示す短い完全な例を示してください。どのようにオブジェクトを使用しているのかわかりません。
追加された 著者 Jon Skeet,
@Ken:ローカル変数を宣言し、オブジェクトを作成して初期化しています。しかし、私たちが見る限り、あなたはその物体を持っているものは何も行っていません。特に、あなたは context パラメータを完全に無視しています.MVCに慣れていませんが、なんとか context または、作成したリストで少なくとも何かするのですか?そうでなければ目に見える副作用はありません...( Seed )がどのように通常使用されているかの例がありますか?
追加された 著者 Jon Skeet,
@Ken:あなたの Seed メソッドがまだ何か何かしていないことを理解していますか?それは完全に無視される新しいオブジェクトを作成しています。
追加された 著者 Jon Skeet,
@ケン:どこで使われているのかわからない...あなたの質問に関連するコードをすべて表示しようとしてください。
追加された 著者 Jon Skeet,
@ケン:オブジェクトがどのように渡されているかはわかりません。あなたは、ローカル変数に値を代入するvoidメソッドを表示しました。明らかにそれは何もしません。実際のコードは、オブジェクトをSeedメソッドから他のコードにどのように渡しますか?
追加された 著者 Jon Skeet,
@ケン:空リストは驚くべきことです...あなたがそれを作った直後にオブジェクトを見るとどうなりますか?
追加された 著者 Jon Skeet,
@ケン:どのように値をビューに渡していますか?物事がうまくいかない場所にいるように聞こえるかもしれません。デバッガは、オブジェクトを作成した直後に何を表示しますか?それが色を持っていて、後でそれを持っていない場合は、どこに欠けているのかを考えなければなりません。
追加された 著者 Jon Skeet,

Somethingオブジェクトのコンストラクタで、新しいオブジェクトColorsをインスタンス化していることを確認してください。私の推測はあなたの問題です。あなたは多くのコードを投稿することはありませんでした。

このようなもの:

public Something()
{
     this.Colors = new List();
}

このようにすると、Somethingオブジェクト内に常に有効なリストオブジェクトが存在します。

あなたのモデルコードを次のように変更してください:

namespace MVCApplication7
{
    public class Something
    {
        public int SomethingID { get; set; }
        public string Name { get; set; }
        public List Colors { get; set; }
        public Something()
        {
            this.Colors = new List(); 
        }
    }
}

これにより、新しい何かオブジェクトを作成するたびに新しい色のリストがインスタンス化され、オブジェクト参照エラーが防止されます。

UPDATE Ok with what I have listed above as your model, here is your solution to the original question:

var list = new List()
{
   new Something(){SomethingID = 1,Name="John", Colors = {Color.Red,Color.Black}},
   new Something(){SomethingID = 2,Name="George", Colors = {Color.Bisque,Color.Blue}},
   new Something(){SomethingID = 3,Name="Chris", Colors ={Color.Khaki,Color.Cornsilk}}
};
foreach (var item in list)
{
    Console.WriteLine(item.Name);
    foreach (var color in item.Colors)
    {
        Console.WriteLine(color.ToString());
    }
    Console.WriteLine("");
}

Somethingオブジェクトにはそれぞれ固有の色のリストがあることがわかります。 これがあなたの問題を解決する場合は、これを答えとして記入してください。

1
追加された
答えてくれてありがとう、私はまだ私が偉大になると私を助けることができる場合、私はジョン・スケートの答えに書いた問題がある。ありがとう。
追加された 著者 MasterMastic,
モデルを意味する場合は、 int SomethingIDstring NameList Colors の3つの要素のみがあります。
追加された 著者 MasterMastic,
編集した質問(最初の投稿)
追加された 著者 MasterMastic,
私は授業の外に出すことはできないので、これをプロパティの下に含めることを意味します。今はnullではありませんが、List の空のリストです(もちろん色があります)
追加された 著者 MasterMastic,
これはそれだったので、問題を解決しませんでした。色はまだ空です。任意のアイデアをどのように解決するには?この問題はちょっとイライラしています。
追加された 著者 MasterMastic,
あなたの答えに対する最初のコメントで述べたように、問題はモデルではなくビューにあります。ビューに Colors の値を表示しようとすると空になります。 P.Sそのコンストラクタを ColorsName などでどうやって使う必要があったのかを私に説明すると助けになると思います。私はそれを得ていませんでした。
追加された 著者 MasterMastic,
もう一度質問を更新しました。
追加された 著者 MasterMastic,
Somethingオブジェクトのコードを投稿してください。そして、私たちが本当に対処しているものを見ることができます。
追加された 著者 arb,
モデルコードを貼り付けます。それが何をしているのかを見極める必要があります。
追加された 著者 arb,
改訂版の回答を参照してください。
追加された 著者 arb,
私の更新された答えを見てください。
追加された 著者 arb,
あなたによると、問題は「オブジェクト参照がオブジェクトのインスタンスに設定されていません」でした。モデルを更新したモデルに変更した場合は、そのコードを投稿してその問題を解決します。それ以外に何が問題になっていますか?
追加された 著者 arb,
追加された 著者 arb,
コントローラーの Index 関数を変更して、このようなことをして、データをキャプチャします。 var x = db.Somethings.ToList()ビューに渡される前に私はこの時点で Colors が空で、問題はデータベースにあると考えています。
追加された 著者 arb,