このオブジェクトをこのリストに追加できないのはなぜですか? -- c# フィールド 関連 問題

Why I can't add this object into this list?












1
vote

問題

日本語

私は c#の絶対的に新しいもので、オブジェクトをコレクションに挿入しようとしている問題があります。

だから私はいくつかのプロパティを含む vulnsmall という名前の基本クラスを持っています、そして私は vuln という名前のクラスを持っています extends 前の vulnsmall クラス次のコードスニペットで見ることができるように、それに脆弱性を表すリストを含む一部のプロパティを追加します。

<事前> <コード> using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DataModel.Vulnerability { public class Vuln : VulnSmall { ....................... ....................... ....................... public virtual List<VulnerabilityReference> VulnerabilityReferences { get; set; } ....................... ....................... ....................... } }

OK、

別のクラスでは、そのようなものがあります:

<事前> <コード> DataModel.Vulnerability.Vuln currentNVDVuln = new DataModel.Vulnerability.Vuln(); // Creation of the VulnerabilityReference object and initialization of its fields: DataModel.Vulnerability.VulnerabilityReference currentVulnRef = new DataModel.Vulnerability.VulnerabilityReference(); currentVulnRef.Title = "My Title"; currentVulnRef.Description = "My Descripion" currentVulnRef.URL = "www.myurl.com" // Adding the previous obkect to the VulnerabilityReferences list field: currentNVDVuln.VulnerabilityReferences.Add(currentVulnRef);

あなたが見ることができるように私はcurrentnvdvulnという名前の vuln オブジェクト(脆弱性表現リストをそのフィールドとして含む)、 vulnerabilityReference を作成します。オブジェクト( currentvulnref という名前)と私はこのリストに追加しようとします。

が機能しない場合、およびこの行を実行しようとすると:

<事前> <コード> currentNVDVuln.VulnerabilityReferences.Add(currentVulnRef);

エラーに入り、この例外

{オブジェクト参照がオブジェクトのインスタンスに設定されていません。 "} System.Exception {System.NullReferenceException}

なぜですか?問題は何ですか?私は何が足りないのですか?

英語

I am absolutly new in C# and I have the following problem trying to insert an object into a Collection.

So I have a base class named VulnSmall that contains some properties, then I have a class named Vuln that extends the previous VulnSmall class adding to it some properties including a list named VulnerabilityReferences, as you can see in the following code snippet:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace DataModel.Vulnerability {     public class Vuln : VulnSmall     {         .......................         .......................         .......................         public virtual List<VulnerabilityReference> VulnerabilityReferences { get; set; }              .......................         .......................         .......................      } } 

Ok,

in another class I have something like it:

DataModel.Vulnerability.Vuln currentNVDVuln = new DataModel.Vulnerability.Vuln();  // Creation of the VulnerabilityReference object and initialization of its fields: DataModel.Vulnerability.VulnerabilityReference currentVulnRef = new DataModel.Vulnerability.VulnerabilityReference();  currentVulnRef.Title = "My Title"; currentVulnRef.Description = "My Descripion" currentVulnRef.URL = "www.myurl.com"  // Adding the previous obkect to the VulnerabilityReferences list field: currentNVDVuln.VulnerabilityReferences.Add(currentVulnRef); 

As you can see I have a Vuln object named currentNVDVuln (that contains the VulnerabilityReferences list as its field), I create a VulnerabilityReference object (named currentVulnRef) and I try to add it to this list.

But don't work and when try to execute this line:

currentNVDVuln.VulnerabilityReferences.Add(currentVulnRef); 

it go into error and throw this Exception:

{"Object reference not set to an instance of an object."} System.Exception {System.NullReferenceException}

Why? What could be the problem? What am I missing?

</div
  
     
     

回答リスト

2
 
vote
vote
ベストアンサー
 

VulnerabilityReferences Listを初期化していません。したがって、 null 値を持ち、 Add メソッドを呼び出しようとすると、例外がスローされています。 Vuln class:

のコンストラクターで新しいリストを作成できます。 <事前> <コード> $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $writer->save("excel.xls"); readfile("excel.xls"); 0

C#仕様 10.4.4フィールド初期化(自動実装されたプロパティを使用すると、まだフィールドがありますが、それはあなたのためにコンパイラによって生成されます):

フィールドの初期値、静的フィールドであろうと インスタンスフィールドは、フィールドのデフォルト値(セクション5.2)です。 タイプ。

LISTは参照型です。デフォルトでは、 $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $writer->save("excel.xls"); readfile("excel.xls"); 1 の値があります。

 

You are not initializing VulnerabilityReferences list. Thus it has null value and it throws exception when you try to call its Add method. You can create new list in constructor of Vuln class:

public class Vuln : VulnSmall {     public Vuln()     {         VulnerabilityReferences = new List<VulnerabilityReference>();     }      // ... } 

From C# Specification 10.4.4 Field initialization (with auto-implemented property you still have field, but its generated by compiler for you):

The initial value of a field, whether it be a static field or an instance field, is the default value (Section 5.2) of the field's type.

List is a reference type, so by default it will have value null.

</div
 
 
2
 
vote

$writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $writer->save("excel.xls"); readfile("excel.xls"); 2 を初期化する必要があります。コンストラクターで行う場合は、次のようになります。

<事前> <コード> $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $writer->save("excel.xls"); readfile("excel.xls"); 3
 

You should initialize VulnerabilityReferences , it would better if you do it in your constructor:

public class Vuln : VulnSmall {     public Vuln()     {        VulnerabilityReferences = new List<VulnerabilityReference>();     }  } 
</div
 
 
2
 
vote

これを行う必要がある<コード> $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $writer->save("excel.xls"); readfile("excel.xls"); 4 クラスのコンストラクタで:

<事前> <コード> $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $writer->save("excel.xls"); readfile("excel.xls"); 5
 

In constructor of the Vulnclass you need to do this:

public Vuln() {    VulnerabilityReferences  = new List<VulnerabilityReference>(); } 
</div
 
 
2
 
vote

まだ存在しないリストに何かを追加しようとしています。

Listプロパティを定義するのに十分ではありませんが、初期化する必要もあります。例えば:

<事前> <コード> VulnerabilityReferences16
 

You are trying to add something to a list that does not yet exist.

It isn't enough to define your list property, you must also initialize it. For example:

public class Vuln : VulnSmall {     public virtual List<VulnerabilityReference> VulnerabilityReferences { get; set; }       public Vuln()     {         this.VulnerabilityReferences = new List<VulnerabilityReference>();     } } 
</div
 
 
2
 
vote

リストへの参照はNULLであるため、NULL参照例外が発生します。リストの参照はあります。いくつかの時点で実際のリストを作成する必要があります。

<事前> <コード> $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $writer->save("excel.xls"); readfile("excel.xls"); 7

クラスのコンストラクターでそれを実行できます。

<事前> <コード> $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $writer->save("excel.xls"); readfile("excel.xls"); 8
 

You get a null reference exception because the reference to the list is null. You only have a reference for a list, you have to create the actual list at some point:

VulnerabilityReferences = new List<VulnerabilityReference>(); 

You can do that for example in the constructor of the class:

public class Vuln : VulnSmall {    public virtual List<VulnerabilityReference> VulnerabilityReferences { get; set; }        public Vuln(){     VulnerabilityReferences = new List<VulnerabilityReference>();   }  } 
</div
 
 
1
 
vote

項目を挿入するための 998877619

に挿入する必要があります。 <事前> <コード> // Read the file $objReader = PHPExcel_IOFactory::createReader(Excel5); $objPHPExcel = $objReader->load($fileName); 0

しかしより良い解決策は redesign <コード> // Read the file $objReader = PHPExcel_IOFactory::createReader(Excel5); $objPHPExcel = $objReader->load($fileName); 1

へのものです。 <事前> <コード> // Read the file $objReader = PHPExcel_IOFactory::createReader(Excel5); $objPHPExcel = $objReader->load($fileName); 2
 

You should create a List<VulnerabilityReference> to insert item into:

...  currentNVDVuln.VulnerabilityReferences = new List<VulnerabilityReference> VulnerabilityReferences();  currentNVDVuln.VulnerabilityReferences.Add(currentVulnRef); 

But a better solution is to redesign VulnSmall

  public class Vuln : VulnSmall {     // List is created on Vuln creation     private List<VulnerabilityReference> m_VulnerabilityReferences =       new List<VulnerabilityReference>();      // You're not going to set a whole list, are you?     // That's why no "set" here     public IList<VulnerabilityReference> VulnerabilityReferences {       get {         return m_VulnerabilityReferences;        }     }   } 
</div
 
 

関連する質問

1563  C#で相対時間を計算する  ( Calculate relative time in c sharp ) 
特定の Form6 値、相対時間をどのように表示するには、次のように、次のように表示されます。 2時間前 3日前 月前 ...

105  コンソールアプリケーションの信頼できるタイマー  ( Reliable timer in a console application ) 
.NET 3つのタイマータイプがあります(を参照)。 .NET Frameworkクラスライブラリ のタイマークラスの比較)。メインスレッドが忙しい場合は他のタイプがドリフトする可能性があるため、スレッドタイマーを選択しました。これは信頼できるように必...

80  WebサービスからHTML文書を印刷する方法  ( How do i print an html document from a web service ) 
C#WebサービスからHTMLを印刷したいです。 Webブラウザコントロールはオーバーキルであり、サービス環境ではうまく機能しないため、非常に厳しいセキュリティ制約を持つシステムではうまく機能しません。基本的なHTMLページの印刷をサポートする<コード> 9...

1955  日時型の誕生日に基づいて誰かの年齢を計算するのですか?  ( How do i calculate someones age based on a datetime type birthday ) 
人の誕生日を表す<コード> Form5 を与えられます、何年もの年齢の年齢を計算するのですか? ...

701  C#でdecimalをdoubleに変換する方法  ( How to convert decimal to double in c sharp ) 
<コード> Track-Bar を使用して、<コード> Form の不透明度を変更します。 これは私のコードです: <コード> decimal trans = trackBar1.Value / 5000; this.Opacity = trans; ...

141  データセットまたはLINQクエリ結果セットからのデータテーブルを記入する  ( Filling a dataset or a datatable from a linq query result set ) 
どのようにして、ASMX WebサービスとしてLINQクエリを公開しますか? 通常、ビジネス層から、Typed decimal trans = trackBar1.Value / 5000; this.Opacity = trans; 0 または 9988...

65  C#/ vb.netでのT-SQLキャストをデコードする  ( Decoding t sql cast in c vb net ) 
最近、当社のサイトは、 asprox botnet SQL Injection 攻撃。詳細に入ることなく、攻撃は t-sql コマンドをエンコードすることによってSQLコードを実行しようとします。 ASCIIエンコードされたバイナリ文字列。それはこのような...

107  LINQを使用してDataTableからの名前の明確な注文された名前を取得するにはどうすればよいですか。  ( How do i get a distinct ordered list of names from a datatable using linq ) 
Name 列を指定した DataTable を持っています。アルファベット順に順序付けられた一意の名前のコレクションを生成したいです。次のクエリは句によって順序を無視します。 <事前> <コード> var names = (from DataRow...

65  浮動小数点数の解析:すべてのアルゴリズムをキャッチしますか?  ( Floating point number parsing is there a catch all algorithm ) 
多文化プログラミングの楽しい部分の1つは数値フォーマットです。 アメリカ人は10,000.50を使用しています ドメイズは10.000,50 を使用しています フランス語10 000,50 私の最初のアプローチは、区切り文字に遭遇し、これを10進数の区切...

55  フォルダとファイルを圧縮/解凍する  ( Compressing decompressing folders files ) 
C#でファイルやフォルダを迅速に圧縮または解凍するための良い方法を誰もが知っていますか?大きなファイルを処理する必要があるかもしれません。 ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有