স্ট্রিংয়ের মতো সি # অন্তর্নির্মিত প্রকারগুলি কীভাবে প্রসারিত করবেন?


91

সবাইকে শুভেচ্ছা জানাচ্ছি ... আমার Trimএকটি দরকার String। তবে আমি স্ট্রিংয়ের মধ্যেই সমস্ত পুনরাবৃত্তি ফাঁকা স্থানগুলি সরাতে চাই, কেবল শেষ বা এটির শুরুতে নয়। আমি এ জাতীয় পদ্ধতিতে এটি করতে পারি:

public static string ConvertWhitespacesToSingleSpaces(string value)
{
    value = Regex.Replace(value, @"\s+", " ");
}

কোনটি আমি থেকে পেয়েছিলাম এখানে । তবে আমি চাই এই কোডটির এই অংশটি String.Trim()নিজের মধ্যে কল করা উচিত , তাই আমি মনে করি Trimপদ্ধতিটি প্রসারিত বা ওভারলোড বা ওভাররাইড করা দরকার ... এটি করার কোনও উপায় আছে কি?

আগাম ধন্যবাদ.

উত্তর:


166

যেহেতু আপনি প্রসারিত করতে পারবেন না string.Trim()। আপনি এখানে বর্ণিত হিসাবে একটি এক্সটেনশন পদ্ধতি তৈরি করতে পারেন যা সাদা স্থানকে ছাঁটাই করে এবং হ্রাস করে।

namespace CustomExtensions
{
    //Extension methods must be defined in a static class
    public static class StringExtension
    {
        // This is the extension method.
        // The first parameter takes the "this" modifier
        // and specifies the type for which the method is defined.
        public static string TrimAndReduce(this string str)
        {
            return ConvertWhitespacesToSingleSpaces(str).Trim();
        }

        public static string ConvertWhitespacesToSingleSpaces(this string value)
        {
            return Regex.Replace(value, @"\s+", " ");
        }
    }
}

আপনি এটি যেমন ব্যবহার করতে পারেন

using CustomExtensions;

string text = "  I'm    wearing the   cheese.  It isn't wearing me!   ";
text = text.TrimAndReduce();

আপনি দেয়

text = "I'm wearing the cheese. It isn't wearing me!";

ফাইলটির কোনও বিশেষ নাম প্রয়োজন? বা আপনি এই কোথায় সংরক্ষণ করবেন? এটি কি কোনও ইউটিল ক্লাসে লাগানো যেতে পারে বা এরকম কিছু?
পরীক্ষার

4
@ টেস্টিং যতক্ষণ না তারা আপনার প্রকল্পে উল্লেখ করা যায় আপনি এগুলি যে কোনও জায়গায় রাখতে পারেন। আপনি যদি এগুলিকে একটি নির্দিষ্ট নেমস্পেসে রাখেন তবে অন্য শ্রেণীর মতো 'ব্যবহার করে' বিবৃতি দিয়ে এনে দিন।
দুবার টাইমস

আপনি ঠিক ট্রিমএন্ডআরডিউস ফাংশন থেকে কেন রেগেক্সটি ফিরিয়ে দেননি? এটি আপনার উত্তরটি পড়ার পক্ষে আরও সহজ করে দিত। যদি আপনি নিজের উত্তরটি এতটা ব্যবহার না করে থাকেন যে আপনাকে অন্য কোথাও এলওএল
কলম্বিত

24

এটা কি সম্ভব? হ্যাঁ, তবে কেবল একটি এক্সটেনশন পদ্ধতি দিয়ে

ক্লাসটি System.Stringসিল করা হয়েছে যাতে আপনি ওভাররাইডিং বা উত্তরাধিকার ব্যবহার করতে পারবেন না।

public static class MyStringExtensions
{
  public static string ConvertWhitespacesToSingleSpaces(this string value)
  {
    return Regex.Replace(value, @"\s+", " ");
  }
}

// usage: 
string s = "test   !";
s = s.ConvertWhitespacesToSingleSpaces();

4
পরিষ্কার করে বলার জন্য, না, কার্যকর হওয়া পদক্ষেপগুলি সংশোধন করা সম্ভব নয় String.Trim
মাইকেল পেট্রোটা 5'11

10

আপনার প্রশ্নের একটি হ্যাঁ এবং না আছে।

হ্যাঁ, আপনি এক্সটেনশন পদ্ধতি ব্যবহার করে বিদ্যমান ধরণের প্রসারিত করতে পারেন। প্রাকৃতিকভাবে প্রসারিত পদ্ধতিগুলি কেবল ধরণের পাবলিক ইন্টারফেসে অ্যাক্সেস করতে পারে।

public static string ConvertWhitespacesToSingleSpaces(this string value) {...}

// some time later...
"hello world".ConvertWhitespacesToSingleSpaces()

না, আপনি এই পদ্ধতিটি কল করতে পারবেন না Trim()। এক্সটেনশন পদ্ধতিগুলি ওভারলোডিংয়ে অংশ নেয় না। আমি মনে করি একটি সংকলক এমনকি এটি বিশদ বিবরণ একটি ত্রুটি বার্তা দিতে হবে।

প্রসারিত পদ্ধতিগুলি কেবল তখনই দৃশ্যমান হয় যদি নাম ব্যবহার করে এমন ধরণটি যে পদ্ধতিটি সংজ্ঞায়িত করে যে পদ্ধতিটি ব্যবহার করে।



2

এক্সটেনশন পদ্ধতিগুলি ব্যবহার করার পাশাপাশি - সম্ভবত এখানে একজন ভাল প্রার্থী - কোনও বস্তুর "মোড়ানো" (যেমন "অবজেক্ট কমপোজিশন" )ও সম্ভব। যতক্ষণ না মোড়ানো ফর্মটিতে জিনিসটি মোড়ানো ছাড়া আর কোনও তথ্য থাকে না তবে মোড়ানো আইটেমটি কোনও ক্ষতির সাথে কোনও পরিষ্কার ক্ষতি বা স্পষ্ট রূপান্তরগুলির মধ্য দিয়ে যেতে পারে: কেবল টাইপ / ইন্টারফেসের পরিবর্তন।

শুভ কোডিং।

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