সি # একটি তালিকা বিপরীত করার চেষ্টা করছে


90
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();
}

বিপরীত কাজ করে না:

Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'

কোন ধারনা কেন এই হতে পারে?

উত্তর:


143

চেষ্টা করুন:

NavItems.Reverse();
return NavItems;

List<T>.Reverse()একটি স্থানের বিপরীত; এটি একটি নতুন তালিকা ফিরে আসে না।

এই করে LINQ, যেখানে বিপরীতে Reverse() ফেরৎ বিপরীত ক্রম, কিন্তু এটা করা হয় যখন একটি উপযুক্ত অ এক্সটেনশন পদ্ধতি সবসময় একটি এক্সটেনশন পদ্ধতি পছন্দ নির্বাচন করেছেন। এছাড়াও, লিনকিউ ক্ষেত্রে এটি হতে হবে:

return someSequence.Reverse().ToList();

4
FYI যারা একটি অ্যারেটি রিভার্স করতে চান এটি কাজ করে না, আপনাকে পরিবর্তে অ্যারে কল করতে হবে instead পরিবর্তে অ্যারে (অ্যারে)।
আয়ান ওয়ার্ড

11
সবেমাত্র একটি আকর্ষণীয় বিশেষ ক্ষেত্রে ভুগছেন: যখন কোনও ভেরিয়েবল হিসাবে ঘোষণা করা হয় List<int> list, তারপরে list.Reverse()ইন-প্লেস সংস্করণটিকে কল করে। তারপরে, কোনও সহকর্মী বিকাশকারী অতিরিক্ত স্মার্ট এবং ঘোষণাটিকে পরিবর্তিত করে IList<int>। এটি কোডটি খুব অপ্রত্যাশিতভাবে ভঙ্গ করে, কারণ এর পরে ফাংশন IEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source)ওভারলোডটি ব্যবহৃত হয়, এবং এটি
নজরে

103

এক কাজ হবে Return NavItems.AsEnumerable().Reverse();


4
এটি ভাল এবং আমার ক্ষেত্রে কাজ করে (মূল তালিকাটি ছোঁয়া ছাড়ুন)! ধন্যবাদ
giboz

20

.Reverse() একটি তালিকার তালিকার মধ্যে থাকা আইটেমগুলিকে বিপরীত করে, এটি কোনও নতুন বিপরীত তালিকা ফিরে আসে না।


8

Reverse()বিপরীত তালিকা নিজেই দেয় না, এটি মূল তালিকাটি সংশোধন করে। সুতরাং নিম্নলিখিত হিসাবে এটি আবার লিখুন:

return NavItems.Reverse(); 

প্রতি

NavItems.Reverse(); 
return NavItems;

6

Reverse() আপনার ফাংশনের প্রত্যাশা অনুযায়ী কোনও তালিকা ফেরত দেয় না।

NavItems.Reverse();
return NavItems;

এবং এটি অকার্যকর প্রত্যাবর্তন করার কারণে, আপনি এটিকে রেভের জন্য নির্ধারণ করতে পারবেন না।
ফ্ল্যাগব্যাগ


2

আপনার উদাহরণের মতো একটি তালিকা থাকলে:

List<Lite.CategoryNavItem> NavItems

আপনি আসলটি পরিবর্তন না করে নতুন তালিকা ফিরিয়ে আনতে জেনেরিক বিপরীত <> এক্সটেনশন পদ্ধতিটি ব্যবহার করতে পারেন। কেবল এই জাতীয় এক্সটেনশন পদ্ধতিটি ব্যবহার করুন:

List<Lite.CategoryNavItem> reversed = NavItems.Reverse<Lite.CategoryNavItem>();

দ্রষ্টব্য: আপনাকে এক্সটেনশন পদ্ধতিটি সুস্পষ্টভাবে ব্যবহার করতে <> জেনেরিক ট্যাগগুলি নির্দিষ্ট করতে হবে। ভুলে যাবেন না

using System.Linq;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.