在C#程序中,我製作了一個從列表中刪除對象的方法。用戶輸入要刪除的項目的索引,然後要求用戶確認刪除,並且如果用戶確認該項目從列表中移除,否則該列表保持不變。
我不確定將參數傳遞給方法的最佳方式。我試圖通過引用傳遞列表(作爲out
參數):在C#中,我應該通過值傳遞一個參數並返回相同的變量,或通過引用?
static void DeleteCustomer(out List<Customer> customers)
{
// ...display list of objects for user to choose from...
int deleteId = ReadInt("Enter ID of customer to delete: ");
Console.Write("Are you sure you want to delete this customer?");
if (Console.ReadLine().ToLower() == "y")
{
customers.RemoveAt(deleteId);
}
}
,因爲我得到了錯誤使用未分配的局部變量的「客戶」和的輸出參數的客戶上面的代碼不起作用'必須在控制離開當前方法之前分配。我想我可以按值傳遞的列表,並返回相同的列表,像這樣:
static List<Customer> DeleteCustomer(List<Customer> customers)
{
int deleteId = ReadInt("Enter ID of customer to delete: ");
Console.Write("Are you sure you want to delete this customer?");
if (Console.ReadLine().ToLower() == "y")
{
customers.RemoveAt(deleteId);
}
return customers;
}
// ...which would be called from another method with:
List<Customer> customers = DeleteCustomer(customers);
,但這似乎並不有效,因爲相同的變量是按值傳遞之後返回。
在這種情況下傳遞參數的最有效方法是什麼?
列表自動通過引用傳遞,因此不需要返回它。調用方法將看到在對傳遞列表的引用中反映的更改。 –
user469104
2014-12-02 18:27:07
請參見:[參數在C#中傳遞 - Jon Skeet](http://www.yoda.arachsys.com/csharp/parameters.html)。也可以嘗試第二種方法,但不返回列表,您將看到它已被更改。這是因爲引用類型的地址是按值傳遞的。 **但重要的是**,你不應該擔心效率*現在*,考慮編寫代碼來更清楚地表達意圖,並且稍後纔會尋求提高性能。 – Habib 2014-12-02 18:29:01
第二種方法可以有一個返回類型'void'。 – 2014-12-02 18:31:07