public class CategoryNavItem
{
public int ID { get; set; }
public string Name { get; set; }
public string Icon { get; set; }
public CategoryNavItem(int CatID, string CatName, string CatIcon)
{
ID = CatID;
Name = CatName;
Icon = CatIcon;
}
}
public static List<Lite.CategoryNavItem> getMenuNav(int CatID)
{
List<Lite.CategoryNavItem> NavItems = new List<Lite.CategoryNavItem>();
-- Snipped code --
return NavItems.Reverse();
}
Kebalikannya tidak berhasil:
Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'
Ada ide mengapa ini mungkin terjadi?
List<int> list
, makalist.Reverse()
memanggil versi di tempat. Kemudian, sesama pengembang sangat cerdas dan mengubah deklarasi menjadiIList<int>
. Ini memecah kode dengan cara yang sangat tidak terduga, karena kemudian fungsiIEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source)
kelebihan beban digunakan, dan ini tidak diperhatikan - Anda harus memperhatikan nilai kembalian yang tidak digunakan, dan itu jarang dipraktikkan di C #Salah satu solusinya adalah
Return NavItems.AsEnumerable().Reverse();
sumber
.Reverse()
pada daftar membalikkan item dalam daftar, itu tidak mengembalikan daftar terbalik yang baru.sumber
Reverse()
tidak mengembalikan daftar terbalik itu sendiri, itu mengubah daftar asli. Jadi tulis ulang sebagai berikut:return NavItems.Reverse();
UNTUK
NavItems.Reverse(); return NavItems;
sumber
Reverse()
tidak mengembalikan List seperti yang diharapkan dari fungsi Anda.NavItems.Reverse(); return NavItems;
sumber
.Reverse
membalikkan "di tempat" ..., cobaNavItems.Reverse(); return NavItems;
sumber
Jika Anda memiliki daftar seperti di contoh Anda:
Anda dapat menggunakan metode ekstensi Reverse <> generik untuk mengembalikan daftar baru tanpa mengubah yang asli. Cukup gunakan metode ekstensi seperti ini:
Catatan: Anda perlu menentukan <> tag umum untuk secara eksplisit menggunakan metode ekstensi. Jangan lupakan
using System.Linq;
sumber