DOBON.NET DOBON.NETプログラミング掲示板過去ログ

構造体のオペランドがわかりません

環境/言語:[WindowsXP/C#.NET/ ]
分類:[.NET]

2006/08/28(Mon) 14:09:31 編集(投稿者)
2006/08/28(Mon) 14:09:24 編集(投稿者)



配列を使って構造体作ったんですが、ifステートメントでの処理でエラーが発生してしまいます。調べたのですが解決できません。例としてコードを以下のように作りました。


public struct Test
{
public int a;
public string b;
}

public Test[] test;



public void button1_Click(object sender, EventArgs e)
{

for(int i =0;i < 5;i++){
if(test[i] != null){


エラー文は、「オペランドが適用していません」と書かれています。
null値または等価式を変更するのでしょうか。
どうぞ、ご教授をお願いします。
2006/08/28(Mon) 14:20:41 編集(投稿者)

>public Test[] test;
のインスタンスを作成していないからです。

つまり
test[ i ] が null 以前に test が null の状態です。

0〜4ならば
test = new Test[ 5 ];
と、配列を作成してください。


もしくは、配列の上限が決まっていないのであれば、ArrayList(C#2.0ならListジェネリッククラス)を使ってみるとか。
> エラー文は、「オペランドが適用していません」と書かれています。

比較部分を、
if ( test[i].Equals( default(Test) ) )
あるいは、
if ( test[i].Equals( new Test() ) )
ないしは、
if ( ( test[i].a == 0 ) && ( test[i].b == String.Empty ) )
にしてみては如何でしょう。


あるいは、== での比較ができるよう、構造体側に、
operator == / operator != / Equals の実装を求めるとか。
2006/08/28(Mon) 15:57:56 編集(投稿者)

■No17314に返信(Blueさんの記事)

Blueさん魔界の仮面弁士さんすばやい返答ありがとうございます。

まずBlueさんの方をやってみました。

public partial class Form1 : Form
{
public struct Test
{
public int a;
public string b;
}

public Test[] test;

public Form1()
{
InitializeComponent();

Test[] test = new Test[5];

}

このような感じで記入したんですが同じようなエラーが発生してしまいました。

次に魔界の仮面弁士さんのやり方でやってみました。

if ( test[i].Equals( new Test() ) )を使うことで解決することができました。

Blueさん魔界の仮面弁士さんありがとうございました。

またよろしくお願いします^^
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板