"ফাঁকা" সি # ল্যাম্বডা এক্সপ্রেশনটি নির্দিষ্ট করার কোনও উপায় আছে কি?


118

আমি একটি "খালি" ল্যাম্বডা এক্সপ্রেশনটি ঘোষণা করতে চাই যা ভাল, কিছুই নয়। DoNothing()পদ্ধতির প্রয়োজন ছাড়াই এই জাতীয় কিছু করার কোনও উপায় আছে কি ?

public MyViewModel()
{
    SomeMenuCommand = new RelayCommand(
            x => DoNothing(),
            x => CanSomeMenuCommandExecute());
}

private void DoNothing()
{
}

private bool CanSomeMenuCommandExecute()
{
    // this depends on my mood
}

এটি করার ক্ষেত্রে আমার উদ্দেশ্যটি কেবলমাত্র আমার ডাব্লুপিএফ কমান্ডের সক্ষম / অক্ষম অবস্থাকে নিয়ন্ত্রণ করে control সম্ভবত এটি আমার জন্য খুব সকালেই ছিল, তবে আমি ধারণা করেছি যে x => DoNothing()একই জিনিসটি সম্পাদন করার জন্য ল্যাম্বডা ভাবটি কোনওভাবে এইভাবে ঘোষণা করার উপায় রয়েছে:

SomeMenuCommand = new RelayCommand(
    x => (),
    x => CanSomeMenuCommandExecute());

এই কাজ করতে কিছু উপায় আছে কি? করণীয় কিছুই করার দরকার নেই বলে মনে হচ্ছে এটি অপ্রয়োজনীয়।

উত্তর:


231
Action doNothing = () => { };

একটি পূর্বনির্ধারিত খালি লাম্বদা আছে? আমি মনে করি যে যতবার প্রয়োজন খালি ল্যাম্বডা তৈরি করা এটি একটি খারাপ ধারণা পারফরম্যান্স বুদ্ধিমানের কাজ। যেমন JQuery এ আছেnoop এবং আমি সি # তে অনুরূপ কিছু উপস্থিত থাকার আশা করব be
qqqqqqq

সুতরাং এর একটি অ্যাসিঙ্ক সংস্করণটির ভার্বোজের প্রয়োজন Func<Task> doNothing = async() => await Task.CompletedTask;?
প্যাট্রিক জাজালাপস্কি

23

এটি একটি পুরানো প্রশ্ন, তবে আমি ভেবেছিলাম যে আমি এমন কোনও কোড যুক্ত করব যা এই ধরণের পরিস্থিতির জন্য দরকারী বলে খুঁজে পেয়েছি। আমার একটি Actionsস্ট্যাটিক ক্লাস এবং একটি Functionsস্ট্যাটিক ক্লাস রয়েছে যার মধ্যে কিছু প্রাথমিক কাজ রয়েছে:

public static class Actions
{
  public static void Empty() { }
  public static void Empty<T>(T value) { }
  public static void Empty<T1, T2>(T1 value1, T2 value2) { }
  /* Put as many overloads as you want */
}

public static class Functions
{
  public static T Identity<T>(T value) { return value; }

  public static T0 Default<T0>() { return default(T0); }
  public static T0 Default<T1, T0>(T1 value1) { return default(T0); }
  /* Put as many overloads as you want */

  /* Some other potential methods */
  public static bool IsNull<T>(T entity) where T : class { return entity == null; }
  public static bool IsNonNull<T>(T entity) where T : class { return entity != null; }

  /* Put as many overloads for True and False as you want */
  public static bool True<T>(T entity) { return true; }
  public static bool False<T>(T entity) { return false; }
}

আমি বিশ্বাস করি এটি কেবলমাত্র সামান্য পরিমাণে পাঠযোগ্যতার উন্নতি করতে সহায়তা করে:

SomeMenuCommand = new RelayCommand(
        Actions.Empty,
        x => CanSomeMenuCommandExecute());

// Another example:
var lOrderedStrings = GetCollectionOfStrings().OrderBy(Functions.Identity);

10

এই কাজ করা উচিত:

SomeMenuCommand = new RelayCommand(
    x => {},
    x => CanSomeMenuCommandExecute());

7

ধরে নিচ্ছি আপনার কেবল প্রতিনিধি প্রয়োজন (অভিব্যক্তি গাছের চেয়ে) তবে এটি কাজ করা উচিত:

SomeMenuCommand = new RelayCommand(
        x => {},
        x => CanSomeMenuCommandExecute());

(এটি একটি বিবৃতি দেহ পেয়েছে বলে অভিব্যক্তি গাছগুলির সাথে কাজ করবে না more আরও তথ্যের জন্য C # 3.0 টিপিতে 4..6 বিভাগ দেখুন))


2

আপনার কেন ডনথিংয়ের পদ্ধতি প্রয়োজন তা আমি পুরোপুরি বুঝতে পারি না।

আপনি কি পারবেন না:

SomeMenuCommand = new RelayCommand(
                null,
                x => CanSomeMenuCommandExecute());

3
এটি সম্ভবত পরীক্ষা করা হয়েছে এবং সম্ভবত একটি এনআরই নিক্ষেপ করবে।
ডাইকাম

আমি মনে করি ডাইকাম ঠিকই আছে, তবে আমি কেবল নাল পাস করার কথা ভাবিনি :-)
রব

1
আমি কেন বুঝতে পারছি না কেন এটিকে নিম্নমানের করা হয়? জর্জি একটি বৈধ পয়েন্ট তোলে, যদিও এটি পরীক্ষা করার জন্য এটি একটি ছোট প্রচেষ্টা হত।
কোহেন

+1, এটি একটি বৈধ সমাধান, কেবল নাল চেকিংটি বাড়ানো উচিত new RelayCommand(..
নওফাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.