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


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.