c# - সি#আপনার প্রিয় এক্সটেনশান পদ্ধতি কি?(codeplex.com/extensionoverflow)




.net open-source (20)

IENumerables জন্য প্রতিটি জন্য

public static class FrameworkExtensions
{
    // a map function
    public static void ForEach<T>(this IEnumerable<T> @enum, Action<T> mapFunction)
    {
        foreach (var item in @enum) mapFunction(item);
    }
}

নির্বোধ উদাহরণ:

var buttons = GetListOfButtons() as IEnumerable<Button>;

// click all buttons
buttons.ForEach(b => b.Click());

শীতল উদাহরণ:

// no need to type the same assignment 3 times, just
// new[] up an array and use foreach + lambda
// everything is properly inferred by csc :-)
new { itemA, itemB, itemC }
    .ForEach(item => {
        item.Number = 1;
        item.Str = "Hello World!";
    });

বিঃদ্রঃ:

এটি Select মতো নয় কারণ Select আপনার ফাংশনটি অন্য তালিকাতে রূপান্তর করার জন্য কিছু ফেরত দেওয়ার প্রত্যাশা করে।

জন্য প্রতিটি সহজভাবে আপনি কোন রূপান্তর / তথ্য ম্যানিপুলেশন ছাড়া আইটেম প্রতিটি জন্য কিছু সঞ্চালন করতে পারবেন।

আমি এটি তৈরি করেছি তাই আমি আরো কার্যকরী শৈলীতে প্রোগ্রাম করতে পারি এবং আমি বিস্মিত ছিলাম যে তালিকাটি একটি ForEach আছে যখন IENumerable নয়।

Codeplex প্রকল্পে এই রাখুন

আসুন আমরা আপনার চমৎকার এবং প্রিয় এক্সটেনশান পদ্ধতি পোস্ট করার উত্তরগুলির একটি তালিকা তৈরি করি।

প্রয়োজনীয়তাটি সম্পূর্ণ কোডটি পোস্ট করা উচিত এবং এটি কীভাবে ব্যবহার করবেন তার একটি উদাহরণ এবং একটি ব্যাখ্যা।

এই বিষয়ে উচ্চ আগ্রহের উপর ভিত্তি করে আমি Codeplex এক্সটেনশানফ্লোফ নামক একটি ওপেন সোর্স প্রকল্প সেট আপ করেছি।

কোডপ্লেক্স প্রকল্পে কোডটি রাখতে একটি স্বীকৃতি সহ আপনার উত্তরগুলি চিহ্নিত করুন।

সম্পূর্ণ সোর্সকোড পোস্ট করুন এবং একটি লিঙ্ক না দয়া করে।

কোডপ্লেক্স নিউজ:

24.08.2010 কোডপ্লেক্স পৃষ্ঠা এখন এখানে: http://extensionoverflow.codeplex.com/

11.11.2008 এক্সএমএল সেরিয়ালাইজ / এক্সএমএল ডেসেরিয়ালাইজ এখন Implemented এবং ইউনিট পরীক্ষা করা হয়

11.11.2008 এখনও আরও বিকাশকারীদের জন্য রুম আছে। ;-) এখন যোগ দিন!

11.11.2008 তৃতীয় BKristensen Codeplex BKristensen যোগদান করেছেন, BKristensen

11.11.2008 ফর্ম্যাট উইথ এখন Implemented এবং ইউনিট পরীক্ষা করা হয়

09.11.2008 দ্বিতীয় contributer Codeplex ওভারফ্লো যোগদান। chakrit ।

09.11.2008 আমাদের আরো ডেভেলপারদের প্রয়োজন। ;-)

09.11.2008 ThrowIfArgumentIsNull এখন কোডপ্লক্সে Implemented এবং ইউনিট পরীক্ষা


ThrowIfArgumentIsNull হল সেই নিল চেক করার জন্য একটি চমৎকার উপায় যা আমরা সবাই করতে পারি।

public static class Extensions
{
    public static void ThrowIfArgumentIsNull<T>(this T obj, string parameterName) where T : class
    {
        if (obj == null) throw new ArgumentNullException(parameterName + " not allowed to be null");
    }
}

নীচে এটি ব্যবহার করার উপায় এবং এটি আপনার নামস্থানগুলিতে সমস্ত ক্লাসে বা যেখানেই আপনি এটির নামস্পেসটি ব্যবহার করেন সেখানেই এটি কাজ করে।

internal class Test
{
    public Test(string input1)
    {
        input1.ThrowIfArgumentIsNull("input1");
    }
}

CodePlex প্রকল্পে এই কোডটি ব্যবহার করা ঠিক।


আমার MiscUtil প্রকল্পে আমার বিভিন্ন এক্সটেনশান পদ্ধতি রয়েছে (সম্পূর্ণ উৎস সেখানে পাওয়া যায় - আমি এখানে এটি পুনরাবৃত্তি করতে যাচ্ছি না)। আমার পছন্দসই, যা কিছু অন্যান্য ক্লাস (যেমন রেঞ্জ) জড়িত:

তারিখ এবং সময় উপাদান - বেশিরভাগ ইউনিট পরীক্ষা জন্য। আমি উত্পাদন তাদের ব্যবহার করতে চাই না :)

var birthday = 19.June(1976);
var workingDay = 7.Hours() + 30.Minutes();

রেঞ্জ এবং stepping - তার অপারেটর স্টাফ জন্য মার্কস Gravell ব্যাপক ধন্যবাদ এই সম্ভব করতে:

var evenNaturals = 2.To(int.MaxValue).Step(2);
var daysSinceBirth = birthday.To(DateTime.Today).Step(1.Days());

তুলনা:

var myComparer = ProjectionComparer.Create(Person p => p.Name);
var next = myComparer.ThenBy(p => p.Age);
var reversed = myComparer.Reverse();

আর্গুমেন্ট চেকিং:

x.ThrowIfNull("x");

LINQ থেকে এক্সএমএলটি বেনামে প্রযোজ্য (বা উপযুক্ত বৈশিষ্ট্যের সাথে অন্যান্য ধরনের):

// <Name>Jon</Name><Age>32</Age>
new { Name="Jon", Age=32}.ToXElements();
// Name="Jon" Age="32" (as XAttributes, obviously)
new { Name="Jon", Age=32}.ToXAttributes()

Push LINQ - এখানে ব্যাখ্যা করার জন্য খুব বেশি সময় লাগবে, কিন্তু এটির জন্য অনুসন্ধান করুন।


আমার রূপান্তর এক্সটেনশন যা আপনাকে করতে দেয়:

int i = myString.To<int>();

এখানে এটি পোস্ট করা হয়েছে, দ্য সফটওয়্যারজডিআই ডটকম

public static T To<T>(this IConvertible obj)
{
  return (T)Convert.ChangeType(obj, typeof(T));
}

public static T ToOrDefault<T>
             (this IConvertible obj)
{
    try
    {
        return To<T>(obj);
    }
    catch
    {
        return default(T);
    }
}

public static bool ToOrDefault<T>
                    (this IConvertible obj,
                     out T newObj)
{
    try
    {
        newObj = To<T>(obj); 
        return true;
    }
    catch
    {
        newObj = default(T); 
        return false;
    }
}

public static T ToOrOther<T>
                       (this IConvertible obj,
                       T other)
{
  try
  {
      return To<T>obj);
  }
  catch
  {
      return other;
  }
}

public static bool ToOrOther<T>
                         (this IConvertible obj,
                         out T newObj,
                         T other)
{
    try
    {
        newObj = To<T>(obj);
        return true;
    }
    catch
    {
        newObj = other;
        return false;
    }
}

public static T ToOrNull<T>
                      (this IConvertible obj)
                      where T : class
{
    try
    {
        return To<T>(obj);
    }
    catch
    {
        return null;
    }
}

public static bool ToOrNull<T>
                  (this IConvertible obj,
                  out T newObj)
                  where T : class
{
    try
    {
        newObj = To<T>(obj);
        return true;
    }
    catch
    {
        newObj = null;
        return false;
    }
}

আপনি ব্যর্থতার জন্য ডিফল্ট জিজ্ঞাসা করতে পারেন (সংখ্যাসূচকদের জন্য ফাঁকা কন্সট্রাকটর বা "0" কল করুন), একটি "ডিফল্ট" মান উল্লেখ করুন (আমি এটি "অন্যান্য" বলি), অথবা নাল (যেখানে T: শ্রেণী) জিজ্ঞাসা করুন। আমি উভয় নীরব ব্যতিক্রম মডেল এবং একটি সাধারন TryParse মডেল প্রদান করেছি যা গৃহীত পদক্ষেপকে নির্দেশ করে একটি বুল ফিরিয়ে দেয় এবং একটি বাহ্যিক প্যারামিটার নতুন মান ধারণ করে। তাই আমাদের কোড এই মত জিনিস করতে পারেন

int i = myString.To<int>();
string a = myInt.ToOrDefault<string>();
//note type inference
DateTime d = myString.ToOrOther(DateTime.MAX_VALUE);
double d;
//note type inference
bool didItGiveDefault = myString.ToOrDefault(out d);
string s = myDateTime.ToOrNull<string>();

আমি সম্পূর্ণ পরিষ্কারভাবে পুরো জিনিস রোল করতে Nullable ধরনের পেতে পারে না। আমি তোয়ালে ফেলে দেয়ার প্রায় 20 মিনিট আগে চেষ্টা করেছি।


আমি ব্যতিক্রম লগিং করার জন্য একটি এক্সটেনশান পদ্ধতি আছে:

public static void Log(this Exception obj)
{
  //your logging logic here
}

এবং এটি এইভাবে ব্যবহার করা হয়:

try
{
    //Your stuff here
}
catch(Exception ex)
{
    ex.Log();
}

[দুবার পোস্ট করার জন্য দুঃখিত; দ্বিতীয়টি আরও ভাল ডিজাইন করা হয়েছে :-)]


এই কোন ব্যবহার?

public static bool CoinToss(this Random rng)
{
    return rng.Next(2) == 0;
}

public static T OneOf<T>(this Random rng, params T[] things)
{
    return things[rng.Next(things.Length)];
}

Random rand;
bool luckyDay = rand.CoinToss();
string babyName = rand.OneOf("John", "George", "Radio XBR74 ROCKS!");

এখানে উপস্থাপনা বিন্যাসের জন্য আমি ঘন ঘন ব্যবহার করি।

public static string ToTitleCase(this string mText)
{
    if (mText == null) return mText;

    System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
    System.Globalization.TextInfo textInfo = cultureInfo.TextInfo;

    // TextInfo.ToTitleCase only operates on the string if is all lower case, otherwise it returns the string unchanged.
    return textInfo.ToTitleCase(mText.ToLower());
}

মাপ মোকাবেলা করার জন্য একটি সুবিধাজনক উপায়:

public static class Extensions {
    public static int K(this int value) {
        return value * 1024;
    }
    public static int M(this int value) {
        return value * 1024 * 1024;
    }
}

public class Program {
    public void Main() {
        WSHttpContextBinding serviceMultipleTokenBinding = new WSHttpContextBinding() {
            MaxBufferPoolSize = 2.M(), // instead of 2097152
            MaxReceivedMessageSize = 64.K(), // instead of 65536
        };
    }
}

সব উপায়ে কোডপ্লেক্স প্রকল্পের এই রাখুন।

এক্সএমএল সিরিয়ালাইজিং / Deserializing বস্তু:

/// <summary>Serializes an object of type T in to an xml string</summary>
/// <typeparam name="T">Any class type</typeparam>
/// <param name="obj">Object to serialize</param>
/// <returns>A string that represents Xml, empty otherwise</returns>
public static string XmlSerialize<T>(this T obj) where T : class, new()
{
    if (obj == null) throw new ArgumentNullException("obj");

    var serializer = new XmlSerializer(typeof(T));
    using (var writer = new StringWriter())
    {
        serializer.Serialize(writer, obj);
        return writer.ToString();
    }
}

/// <summary>Deserializes an xml string in to an object of Type T</summary>
/// <typeparam name="T">Any class type</typeparam>
/// <param name="xml">Xml as string to deserialize from</param>
/// <returns>A new object of type T is successful, null if failed</returns>
public static T XmlDeserialize<T>(this string xml) where T : class, new()
{
    if (xml == null) throw new ArgumentNullException("xml");

    var serializer = new XmlSerializer(typeof(T));
    using (var reader = new StringReader(xml))
    {
        try { return (T)serializer.Deserialize(reader); }
        catch { return null; } // Could not be deserialized to this type.
    }
}

স্ট্রিং। ফরম্যাট শর্টকাট:

public static class StringExtensions
{
    // Enable quick and more natural string.Format calls
    public static string F(this string s, params object[] args)
    {
        return string.Format(s, args);
    }
}

উদাহরণ:

var s = "The co-ordinate is ({0}, {1})".F(point.X, point.Y);

দ্রুত কপি এবং পেস্ট জন্য here যান।

"some string".F("param") পরিবর্তে "some string".F("param") টাইপ করার জন্য এটি আরও স্বাভাবিক না। "some string".F("param")string.Format("some string", "param") ?

আরও পঠনযোগ্য নামের জন্য, এই পরামর্শগুলির মধ্যে একটি করে চেষ্টা করুন:

s = "Hello {0} world {1}!".Fmt("Stack", "Overflow");
s = "Hello {0} world {1}!".FormatBy("Stack", "Overflow");
s = "Hello {0} world {1}!".FormatWith("Stack", "Overflow");
s = "Hello {0} world {1}!".Display("Stack", "Overflow");
s = "Hello {0} world {1}!".With("Stack", "Overflow");

..


DateTimeExtensions

উদাহরণ:

DateTime firstDayOfMonth = DateTime.Now.First();
DateTime lastdayOfMonth = DateTime.Now.Last();
DateTime lastFridayInMonth = DateTime.Now.Last(DayOfWeek.Friday);
DateTime nextFriday = DateTime.Now.Next(DayOfWeek.Friday);
DateTime lunchTime = DateTime.Now.SetTime(11, 30);
DateTime noonOnFriday = DateTime.Now.Next(DayOfWeek.Friday).Noon();
DateTime secondMondayOfMonth = DateTime.Now.First(DayOfWeek.Monday).Next(DayOfWeek.Monday).Midnight();

gitorious.org/cadenza আমি দেখেছি সবচেয়ে দরকারী এক্সটেনশন পদ্ধতির একটি সম্পূর্ণ লাইব্রেরি।


আমি এই একটি সহায়ক খুঁজে পাওয়া যায় নি

public static IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> pSeq)
{
    return pSeq ?? Enumerable.Empty<T>();
}

এটি কলিং কোডের নল চেক মুছে ফেলে। আপনি এখন করতে পারেন

MyList.EmptyIfNull().Where(....)

একটি উটকেস ওয়ার্ড বা পাস্কালসেস ওয়ার্ড নেয় এবং "শব্দটিকে" শব্দ করে, যেমন উটেলসেস ওয়ার্ড => উট কেস ওয়ার্ড

public static string Wordify( this string camelCaseWord )
{
    // if the word is all upper, just return it
    if( !Regex.IsMatch( camelCaseWord, "[a-z]" ) )
        return camelCaseWord;

    return string.Join( " ", Regex.Split( camelCaseWord, @"(?<!^)(?=[A-Z])" ) );
}

আমি প্রায়ই ক্যাপিটালাইজ সঙ্গে conjuction এটি ব্যবহার

public static string Capitalize( this string word )
{
    return word[0].ToString( ).ToUpper( ) + word.Substring( 1 );
}

উদাহরণ ব্যবহার

SomeEntityObject entity = DataAccessObject.GetSomeEntityObject( id );
List<PropertyInfo> properties = entity.GetType().GetPublicNonCollectionProperties( );

// wordify the property names to act as column headers for an html table or something
List<string> columns = properties.Select( p => p.Name.Capitalize( ).Wordify( ) ).ToList( );

Codeplex প্রকল্প ব্যবহার করতে বিনামূল্যে


এটি চালু করুন:

DbCommand command = connection.CreateCommand();
command.CommandText = "SELECT @param";

DbParameter param = command.CreateParameter();
param.ParameterName = "@param";
param.Value = "Hello World";

command.Parameters.Add(param);

... এই মধ্যে:

DbCommand command = connection.CreateCommand("SELECT {0}", "Hello World");

... এই এক্সটেনশন পদ্ধতি ব্যবহার করে:

using System;
using System.Data.Common;
using System.Globalization;
using System.Reflection;

namespace DbExtensions {

   public static class Db {

      static readonly Func<DbConnection, DbProviderFactory> getDbProviderFactory;
      static readonly Func<DbCommandBuilder, int, string> getParameterName;
      static readonly Func<DbCommandBuilder, int, string> getParameterPlaceholder;

      static Db() {

         getDbProviderFactory = (Func<DbConnection, DbProviderFactory>)Delegate.CreateDelegate(typeof(Func<DbConnection, DbProviderFactory>), typeof(DbConnection).GetProperty("DbProviderFactory", BindingFlags.Instance | BindingFlags.NonPublic).GetGetMethod(true));
         getParameterName = (Func<DbCommandBuilder, int, string>)Delegate.CreateDelegate(typeof(Func<DbCommandBuilder, int, string>), typeof(DbCommandBuilder).GetMethod("GetParameterName", BindingFlags.Instance | BindingFlags.NonPublic, Type.DefaultBinder, new Type[] { typeof(Int32) }, null));
         getParameterPlaceholder = (Func<DbCommandBuilder, int, string>)Delegate.CreateDelegate(typeof(Func<DbCommandBuilder, int, string>), typeof(DbCommandBuilder).GetMethod("GetParameterPlaceholder", BindingFlags.Instance | BindingFlags.NonPublic, Type.DefaultBinder, new Type[] { typeof(Int32) }, null));
      }

      public static DbProviderFactory GetProviderFactory(this DbConnection connection) {
         return getDbProviderFactory(connection);
      }

      public static DbCommand CreateCommand(this DbConnection connection, string commandText, params object[] parameters) {

         if (connection == null) throw new ArgumentNullException("connection");

         return CreateCommandImpl(GetProviderFactory(connection).CreateCommandBuilder(), connection.CreateCommand(), commandText, parameters);
      }

      private static DbCommand CreateCommandImpl(DbCommandBuilder commandBuilder, DbCommand command, string commandText, params object[] parameters) {

         if (commandBuilder == null) throw new ArgumentNullException("commandBuilder");
         if (command == null) throw new ArgumentNullException("command");
         if (commandText == null) throw new ArgumentNullException("commandText");

         if (parameters == null || parameters.Length == 0) {
            command.CommandText = commandText;
            return command;
         }

         object[] paramPlaceholders = new object[parameters.Length];

         for (int i = 0; i < paramPlaceholders.Length; i++) {

            DbParameter dbParam = command.CreateParameter();
            dbParam.ParameterName = getParameterName(commandBuilder, i);
            dbParam.Value = parameters[i] ?? DBNull.Value;
            command.Parameters.Add(dbParam);

            paramPlaceholders[i] = getParameterPlaceholder(commandBuilder, i);
         }

         command.CommandText = String.Format(CultureInfo.InvariantCulture, commandText, paramPlaceholders);

         return command;
      }
   }
}

আরো ADO.NET এক্সটেনশান পদ্ধতি: DbExtensions এক্সটেনশনসDbExtensions


নির্দিষ্ট সংস্কৃতি ব্যবহার করে ফরম্যাট করা স্ট্রিংয়ের জন্য একটি ডবল রূপান্তর করুন:

public static class ExtensionMethods 
{
  public static string ToCurrency(this double value, string cultureName)
  {
    CultureInfo currentCulture = new CultureInfo(cultureName);
    return (string.Format(currentCulture, "{0:C}", value));
  }
}

উদাহরণ:

double test = 154.20;
string testString = test.ToCurrency("en-US"); // $154.20

এটি আমাকে জ্বালাতন করে যে LINQ আমাকে একটি আদেশ দেয় যা ICOMParer কে একটি যুক্তি হিসাবে বাস্তবায়ন করে, কিন্তু একটি সহজ বেনামী তুলনাকারী ফাংশনে পাস সমর্থন করে না। আমি যে সংশোধন।

এই ক্লাস আপনার তুলনাকারী ফাংশন থেকে একটি IComparer তৈরি করে ...

/// <summary>
///     Creates an <see cref="IComparer{T}"/> instance for the given
///     delegate function.
/// </summary>
internal class ComparerFactory<T> : IComparer<T>
{
    public static IComparer<T> Create(Func<T, T, int> comparison)
    {
        return new ComparerFactory<T>(comparison);
    }

    private readonly Func<T, T, int> _comparison;

    private ComparerFactory(Func<T, T, int> comparison)
    {
        _comparison = comparison;
    }

    #region IComparer<T> Members

    public int Compare(T x, T y)
    {
        return _comparison(x, y);
    }

    #endregion
}

... এবং এই এক্সটেনশান পদ্ধতি enumerables আমার নতুন আদেশের overloads প্রকাশ। আমি LINQ থেকে SQL এ কাজ করে সন্দেহ করি, তবে এটি LINQ থেকে অবজেক্টের জন্য দুর্দান্ত।

public static class EnumerableExtensions
{
    /// <summary>
    /// Sorts the elements of a sequence in ascending order by using a specified comparison delegate.
    /// </summary>
    public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector,
                                                                     Func<TKey, TKey, int> comparison)
    {
        var comparer = ComparerFactory<TKey>.Create(comparison);
        return source.OrderBy(keySelector, comparer);
    }

    /// <summary>
    /// Sorts the elements of a sequence in descending order by using a specified comparison delegate.
    /// </summary>
    public static IOrderedEnumerable<TSource> OrderByDescending<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector,
                                                                               Func<TKey, TKey, int> comparison)
    {
        var comparer = ComparerFactory<TKey>.Create(comparison);
        return source.OrderByDescending(keySelector, comparer);
    }
}

আপনি যদি চান চান codeplex এ এই স্বাগতম।


এটি একটি এমভিসি এর জন্য এটি প্রতিটিতে উপলব্ধ যে পরিবর্তনশীল একটি <label />ট্যাগ জেনারেট করার ক্ষমতা যোগ Htmlকরে ViewPage। আশা করি এটি একই এক্সটেনশান বিকাশ করার চেষ্টা অন্যদের ব্যবহার করা হবে।

ব্যবহার করুন:

<%= Html.Label("LabelId", "ForId", "Text")%>

আউটপুট:

<label id="LabelId" for="ForId">Text</label>

কোড:

public static class HtmlHelperExtensions
{
    public static string Label(this HtmlHelper Html, string @for, string text)
    {
        return Html.Label(null, @for, text);
    }

    public static string Label(this HtmlHelper Html, string @for, string text, object htmlAttributes)
    {
        return Html.Label(null, @for, text, htmlAttributes);
    }

    public static string Label(this HtmlHelper Html, string @for, string text, IDictionary<string, object> htmlAttributes)
    {
        return Html.Label(null, @for, text, htmlAttributes);
    }

    public static string Label(this HtmlHelper Html, string id, string @for, string text)
    {
        return Html.Label(id, @for, text, null);
    }

    public static string Label(this HtmlHelper Html, string id, string @for, string text, object htmlAttributes)
    {
        return Html.Label(id, @for, text, new RouteValueDictionary(htmlAttributes));
    }

    public static string Label(this HtmlHelper Html, string id, string @for, string text, IDictionary<string, object> htmlAttributes)
    {
        TagBuilder tag = new TagBuilder("label");

        tag.MergeAttributes(htmlAttributes);

        if (!string.IsNullOrEmpty(id))
            tag.MergeAttribute("id", Html.AttributeEncode(id));

        tag.MergeAttribute("for", Html.AttributeEncode(@for));

        tag.SetInnerText(Html.Encode(text));

        return tag.ToString(TagRenderMode.Normal);
    }
}

public static bool In<T>(this T source, params T[] list)
{
  if(null==source) throw new ArgumentNullException("source");
  return list.Contains(source);
}

আমাকে প্রতিস্থাপন করার অনুমতি দেয়:

if(reallyLongIntegerVariableName == 1 || 
    reallyLongIntegerVariableName == 6 || 
    reallyLongIntegerVariableName == 9 || 
    reallyLongIntegerVariableName == 11)
{
  // do something....
}

and

if(reallyLongStringVariableName == "string1" || 
    reallyLongStringVariableName == "string2" || 
    reallyLongStringVariableName == "string3")
{
  // do something....
}

and

if(reallyLongMethodParameterName == SomeEnum.Value1 || 
    reallyLongMethodParameterName == SomeEnum.Value2 || 
    reallyLongMethodParameterName == SomeEnum.Value3 || 
    reallyLongMethodParameterName == SomeEnum.Value4)
{
  // do something....
}

সঙ্গে:

if(reallyLongIntegerVariableName.In(1,6,9,11))
{
      // do something....
}

and

if(reallyLongStringVariableName.In("string1","string2","string3"))
{
      // do something....
}

and

if(reallyLongMethodParameterName.In(SomeEnum.Value1, SomeEnum.Value2, SomeEnum.Value3, SomeEnum.Value4)
{
  // do something....
}

public static class ComparableExtensions
{
  public static bool Between<T>(this T actual, T lower, T upper) where T : IComparable<T>
  {
    return actual.CompareTo(lower) >= 0 && actual.CompareTo(upper) < 0;
  }
}

উদাহরণ:

if (myNumber.Between(3,7))
{
  // ....
}




extension-methods