[英]Accessing the 'Name' property of an object in C#
我正在學習C#(是我的新手),並且正在構建一個小型Airport應用程序。 我希望能夠獲取機場中飛機的名稱,而不是僅僅知道列表包含各種Airport.Plane
對象。 目前,我的代碼是:
Airport.cs:
using System;
using System.Collections.Generic;
namespace Airport
{
public class Airport
{
public List<object> planes;
public Airport()
{
planes = new List<object>();
}
public List<object> Land(object plane)
{
planes.Add(plane);
Console.WriteLine("Currently in the airport:");
planes.ForEach(Console.WriteLine);
return planes;
}
public List<object> TakeOff(object plane)
{
planes.Remove(plane);
Console.WriteLine("Currently in the airport:");
planes.ForEach(Console.WriteLine);
return planes;
}
public int GetPlaneCount()
{
Console.WriteLine(planes.Count);
return planes.Count;
}
}
}
Plane.cs:
using System;
namespace Airport
{
public class Plane
{
public string Name { get; set; }
public Plane(string name)
{
Name = name;
}
}
}
Program.cs中:
using System;
namespace Airport
{
class Program
{
static void Main(string[] args)
{
Airport airport = new Airport();
Plane plane = new Plane("Private Jet");
airport.Land(plane);
airport.TakeOff(plane);
airport.GetPlaneCount();
}
}
}
我試圖通過Console.Log(plane.Name);
訪問機場中飛機的名稱Console.Log(plane.Name);
但出現以下錯誤:“'對象'不包含名稱的定義”。 任何幫助將非常感激!
謝謝
一些偽代碼可以幫助您理解
public class Airport
{
public string AirportName { get; set;}
public List<Plane> planes;
public Airport(string airportName)
{
AirportName = airportName;
planes = new List<Plane>();
}
public List<Plane> Land(Plane plane)
{
planes.Add(plane);
return planes;
}
public List<Plane> TakeOff(Plane plane)
{
planes.Remove(plane);
return planes;
}
public int GetPlaneCount()
{
Console.WriteLine(planes.Count);
return planes.Count;
}
}
public void Main()
{
var capeTownAirport = new Airport("Cape Town")
var planeA = new Plane("facy plane");
var planeB = new Plane("Another facy plane");
var currentPlans = capeTownAirport.Land(planeA);
var currentPlans2 = capeTownAirport.Land(planeA);
foreach(var plane in currentPlans2)
{
Console.WriteLine(plane.Name);
}
}
基本上, C#在大多數情況下是一種靜態類型的編程語言 ,因此,如果將某些內容聲明為對象,則只會看到對象的屬性,字段和方法。 您可以通過將對象投射到“平面”來輕松解決此問題,但是堅持使用已知類型始終是最好的方法。
var plane = new Plane("My plane");
object myObject = plane;
// Console.WriteLine(myObject.Name); // Compiler complains here - object doesn't have Name property or field defined
Console.WriteLine((Plane)myObject); // Compiler is happy here, but you should never do it like that!
正如您對問題的評論中所說的那樣,請使用強類型列表(使用List <Plane>而不是List <object>),它將可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.