簡體   English   中英

在C#中,如何獲取數組內部對象的屬性?

[英]In C# how do I get the properties of an object that is inside an array?

我在嘗試使用以下方法引用插入到數組中的對象的屬性時遇到麻煩。

    public static void AddEmployees()
    {
        string empID;
        decimal empWage;
        int count = 0;
        do
        {
            Console.Write("Please enter the employee ID number: ");
            empID = Convert.ToString(Console.ReadLine());

            Console.Write("Please enter the employee wage: ");
            empWage = Convert.ToDecimal(Console.ReadLine());

            var employeeObj = CreateEmployee(empID, empWage);
            employeeArray[count] = employeeObj;
            ++count;

        } while (count < 6);

    }

我想以某種可讀格式打印此數組中的信息,但是我不知道如何引用empWage或empID。 理想情況下,我想使用某種foreach循環,如下所示:

    public static void DisplayEmployees()
    {
        foreach (var obj in employeeArray)
        {
            Console.WriteLine("Employee ID: {0}", empID);
            Console.WriteLine("Employee Wage: {0}", empWage);
            Console.WriteLine();
        }
    }

您幾乎擁有它:

foreach (var obj in employeeArray)
{
    Console.WriteLine("Employee ID: {0}", obj.empID);
    Console.WriteLine("Employee Wage: {0}", obj.empWage);
    Console.WriteLine();
}

更新:

如果employeeArray的類型為object[] ,則不能直接引用Employee類中定義的屬性。

解決方法:

代替object[]使用List<Employee> ,例如:

public static List<Employee> employees  = new List<Employee>();

您還需要更改將項目添加到列表的方式:

var employeeObj = CreateEmployee(empID, empWage);
employees.Add(employeeObj);

最后, CreateEmployee的返回類型應為Employee (而不是object )。

您問題的最快答案是可以將對象強制轉換為數組。

((Employee)obj).empID

您還沒有顯示如何定義數組。 如果它是一個Employee數組,則可以放心地在foreach中進行強制轉換,但是由於遇到錯誤,我猜測您的數組可能是對象或繼承層次結構中的更高對象。

如果是這樣,那么在語法上,這就是我指的是:

foreach (var obj in employeeArray)
{
    Console.WriteLine("Employee ID: {0}", ((Employee)obj).empID);
    Console.WriteLine("Employee Wage: {0}", ((Employee)obj).empWage);
    Console.WriteLine();
}

盡管強制轉換可以在許多情況下使用,但是這種代碼很脆弱,因為它依賴於一系列假設,其中最大的前提是數組中的所有內容都是Employee類型的。 無需做出假設,您只需讓編譯器通過使用通用列表而不是普通數組來為您強制執行此操作。 為此,您對集合的定義是:

List<Employee> employeeArray = new List<Employee>();

您可以使用的最后一種技巧:C#有兩個非常可靠的用於轉換的運算符: isas運算符。 is運算符將允許您有條件地檢查某物是否為某種類型,而as運算符讓您嘗試進行強制轉換,但如果類型不匹配,則將獲得null值。 這是兩個運算符的循環變化形式,以使您了解事情的工作方式:

下面我用的在訪問屬性之前驗證類型:

foreach (var obj in employeeArray)
{
    if (obj is Employee)
    {
        Console.WriteLine("Employee ID: {0}", obj.empID);
        Console.WriteLine("Employee Wage: {0}", obj.empWage);
        Console.WriteLine();
    }
}

在下面,我使用as嘗試進行強制類型轉換,但是在嘗試訪問屬性之前,我檢查它是否為null。

foreach (var obj in employeeArray)
{
    var emp = obj as Employee;
    if (emp != null )
    {
        Console.WriteLine("Employee ID: {0}", obj.empID);
        Console.WriteLine("Employee Wage: {0}", obj.empWage);
        Console.WriteLine();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM