私はまだ C# に慣れていませんが、スコープの概念は理解できたと思います。プログラムに問題があり、助けていただければ幸いです。
次のコードの問題は、35 行目で失敗することです。
「非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です」。
オブジェクト Mail が Program クラスの一部としてインスタンス化されており、グローバルにアクセスできるように見えることがわかります。しかし、InitMail() メソッドで Mail.Add を使用しようとすると、Mail オブジェクトが認識されません。
インスタンス化と InitMail コードを Main() に移動すると、問題なく動作します (ただし、インスタンス化の public 修飾子も削除する必要があります)。ここで何が理解できませんか?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TestApp1103
{
class Program
{
// Define an enum type named "Division" specifying all possible values:
public enum Division {PFR, PSE, PVF, PVM, PVS}
//Define a generic class named "MailList" and specify accessor methods:
public class MailList
{
public Division Div { get; set;}
public string[] SuccAddr { get; set; }
public string[] FailAddr { get; set; }
}
// Instantiate a MailList object named "Mail":
public List<MailList> Mail = new List<MailList>();
static void Main(string[] args)
{
// Populate the object "Mail":
InitMail();
}
static void InitMail()
{
Mail.Add( new MailList()
{
Div = Division.PFR,
SuccAddr = new string[2] { "addr1@contoso.com", "addr2@contoso.com" },
FailAddr = new string[2] { "addr3@contoso.com", "addr4@contoso.com" }
});
}
}
}