সি # 6 এ দীর্ঘ স্ট্রিং অন্তরঙ্গকরণের লাইন


134

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

var str = string.Format("some text {0} more text {1}",
    obj1.property,
    obj2.property);

কারও কাছে এই লাইনগুলি ভাঙ্গার কোনও পছন্দসই উপায় আছে?

আমি মনে করি আপনি যেমন কিছু করতে পারেন:

var str = $"some text { obj1.property }" +
  " more text { obj2.property };

1
আমার অভিজ্ঞতায় জটিল অভিব্যক্তিগুলি ছড়িয়ে দেওয়া এড়ানো ভাল। বরং সেক্ষেত্রে একটি পরিবর্তনশীল আহরণ করুন। যদি আপনি এটি করেন, এবং আপনার স্ট্রিংগুলির ভিতরে যেখানে আপনার নতুন লাইন রয়েছে সেখানে ব্রেক আপ হয়ে গেলে এটি সাধারণত সূক্ষ্মভাবে ফিট করে।
মার্কিজবেমা

2
আমি এই প্রশ্ন দ্বারা বিভ্রান্ত। আমি কেবল একটি মাল্টলাইন $""চাই যা কাজ করে@""
কর্নেল প্যানিক

2
কর্নেল আতঙ্ক, প্রশ্নটি কীভাবে দীর্ঘ অন্তরঙ্গকরণের লাইনগুলি ভাঙ্গতে হবে সে সম্পর্কে জিজ্ঞাসা করছে যাতে আমরা স্ট্রিং আক্ষরিকভাবে লাইনফিডগুলি প্রবর্তন না করে কলাম প্রস্থের প্রয়োজনীয়তা লঙ্ঘন করি না। $ @ "" দুর্দান্ত তবে এর মধ্যে যে কোনও নতুন লাইন প্রবর্তিত হয়েছে এটি স্ট্রিং আক্ষরিক হবে।
যিরমিয় গাওদি

4
বিপদ: $"some text { obj1.property }" + " more text { obj2.property }";আপনি যা ভাবেন বলে মনে করেন তা করেন না। এই অভিব্যক্তির কেবল প্রথমার্ধটি একটি বিভক্ত স্ট্রিং; তাহলে সঙ্গে ঘনিভূত হয় -interpolated স্ট্রিং আক্ষরিক" more text { obj2.property }"
bacar

1
$ এ \ টি পান \ r \ N সমর্থন করার জন্য @ প্রশ্ন দেখতে পাবেন stackoverflow.com/questions/51991713/...
M.Hassan

উত্তর:


198

আপনি লাইনটি একাধিক লাইনে বিভক্ত করতে পারেন , তবে আমি বলব না সিনট্যাক্সটি আরও সুন্দর দেখাচ্ছে।

$@একটি ইন্টারপোল্টেড ভার্ব্যাটিম স্ট্রিং ব্যবহার করতে আপনাকে সিনট্যাক্সটি ব্যবহার করতে হবে এবং আপনি {...}প্যারামিটারগুলির মধ্যে নতুন লাইনগুলি স্থাপন করতে পারেন :

string s = $@"This is all {
    10
    } going to be one long {
    DateTime.Now
    } line.";

উপরের স্ট্রিংটিতে কোনও নতুন লাইন থাকবে না এবং এতে আসলে এর মতো সামগ্রী থাকবে:

এটি সমস্ত 10 এক দীর্ঘ 01.08.2015 23.49.47 লাইন হতে চলেছে।

(নোট, নরওয়েজিয়ান ফর্ম্যাট)

এখন, এই বলে, আমি ব্যবহার বন্ধ করব না string.Format। আমার মতে এই স্ট্রিং ইন্টারপোলেশন এক্সপ্রেশনগুলির কয়েকটি সত্যই ভাল লাগছে, তবে আরও জটিলগুলি পড়তে খুব শক্ত হয়ে উঠতে শুরু করে। আপনি যদি না ব্যবহার না করেন তবে FormattableStringকোডটি String.Formatযেভাবেই হোক একটি কলটিতে সংকলিত হবে, তা বিবেচনা করে আমি বলব String.Formatযেখানে এটি বোধগম্য হয় সেদিকেই চলুন ।


সলিড উত্তর। আমি খুব নিশ্চিত FormattableStringযে একটি কল থেকে String.Formatনিঃসৃত।
অ্যালেক্স বুকার

8
এই উত্তরটি আমাকে এর সঠিক বিপরীতে কীভাবে করতে হবে তা বুঝতে সাহায্য করেছিল helped $@""সিনট্যাক্সের জন্য ধন্যবাদ !
ববসন

@ অ্যালেক্সবুকার এটি এর চেয়ে জটিল। আপনি করতে পারবেন না FormattableString.Invarian($"Hello {name}" + \n "are you the owner of {pet}?");কারণ এটি দুটি ইন্টারপোল্টেড স্ট্রিংগুলিকে একক সরল স্ট্রিংয়ের সাথে একীভূত করে।
এভিনিস

নিউলাইনগুলি এবং ট্যাবগুলিকে আন্তঃবিবাহিত ভার্ব্যাটিম স্ট্রিংগুলিতে সম্মান করা হয়। সি # ইন্টারেক্টিভ উইন্ডোতে নিম্নলিখিতটি প্রবেশ করান এবং ফলস্বরূপ স্ট্রিংটি ফর্ম্যাট করা হবে:। > var name = "Simon"; var templateName = "How to interpolate a verbatim string"; var now = DateTime.UtcNow;. var output = $@"Hi {name}, This template is a demo of {templateName}. It was ran at {now.ToString("o")}"; > output। আউটপুটটি হ'ল"Hi Simon,\r\nThis template is a demo of How to interpolate a verbatim string.\r\n\r\nIt was ran at 2020-01-24T15:49:35.6678353Z"
এনজোয়েইনাস

1
@ এঞ্জোয়েনিয়াস আমি মনে করি আপনি মন্তব্যগুলিতে ফর্ম্যাটিং সমর্থনটি ওভাররেটেড করেছেন তবে আপনি যা বলছেন তা আমি বুঝতে এবং সম্মত।
ল্যাসে ভি কার্লসেন

61

আপনি একত্রিত করতে পারেন $এবং @একসঙ্গে স্ট্রিং ক্ষেপক এবং মাল্টি-লাইন স্ট্রিং আক্ষরিক পেতে:

var str = $@"some text { obj1.property }
     more text { obj2.property }";

তবে এটি আপনাকে NewLineমাঝখানে একটি চরিত্র দেবে , তাই এটি আপনি যা চান তা নাও হতে পারে।


3
কিন্তু @ আসলে লাইন ফিডটি আক্ষরিক মধ্যে রাখে না?
যেরেমিয়া গওদি

5
এটা করে. স্পষ্টভাবে বলতে আমার উত্তর আপডেট।
মার্সিনজুরাসেকহাক

কেবলমাত্র একটি নতুন লাইন নয় নতুন লাইনের প্রাথমিক ট্যাব (গুলি)। $@"ভিজ্যুয়াল স্টুডিওতে ব্যবহার করার সময় সত্যিকারের স্ট্রিং ফর্ম্যাটটিকে সঠিকভাবে চিত্রিত করার জন্য আপনাকে পাঠ্য সম্পাদকের ডানদিক থেকে প্রতিটি নতুন লাইন শুরু করতে হবে।
জিডিএস

এই সমাধানের সাহায্যে আপনি স্ট্রিংগুলিতে উদাহরণস্বরূপ \ r এবং \ n ব্যবহার করতে পারবেন না
জোহান ফ্রানজান

22

ওপি অন্য কিছুর জন্য জিজ্ঞাসা করার সময়, আমি আশা করি এই প্রশ্নটি পড়া অনেক লোক পছন্দ করবে এমন একটি মাল্টলাইন ইন্টারপোলটেড $""পছন্দ করবে @""। এটি করতে, ব্যবহার করুন$@""

$@"Height: {height}
Width: {width}
Background: {background}"

3
তিনি আউটপুটে নতুন লাইনগুলি চান না, কেবল কোড নিজেই বিভিন্ন লাইনে মোড়ানোর জন্য
মার্টিন ক্যাপোডিসি

7
তিনি পরিষ্কার করে দিয়েছিলেন যে এই উত্তরটি শ্রোতাদের জন্য ছিল যারা স্ট্রিং ইন্টারপোলেশন সিনট্যাক্স ব্যবহার করে মাল্টলাইন স্ট্রিংগুলি কীভাবে করবেন তা সন্ধানে আগত for
ব্র্যান্ডন বন্ডস

2

এই হল:

var str = $"some text { obj1.property }" +
          $" more text { obj2.property }";

দ্বিতীয়টি নোট $করুন$"..." + $"..."


18
দ্রষ্টব্য যে এটি স্ট্রিংয়ে দুটি কল করবে Forফর্ম্যাট এবং মেমরিতে তিনটি স্ট্রিং তৈরি করবে (সাইড এ, সাইড বি, এবং এ + বি)
কেভিন ক্যালিটভস্কি

1
এটি কি আপনাকে FormattableStringএকত্রিত স্ট্রিংয়ের একটি কাস্ট ব্যবহার করতে বাধা দেবে না ?
বিনকি

4
আজ অনেকগুলি বাস্তবায়নে, গিগাহার্জ সিপিইউতে গিগাবাইটের মেমরির সাথে চালানো, একটি অতিরিক্ত কল এবং একটি অতিরিক্ত স্ট্রিং আপনাকে কর্মক্ষমতা সমস্যা দেয় না। উদাহরণস্বরূপ ও (অ 2) এর অ্যালগরিদম ব্যবহার করে পারফরম্যান্স সমস্যা দেখা দেবে। আমি মনে করি এই লোকটিকে পরাস্ত করা অন্যায়
জোহান ফ্রানজান

1

আমি উদাহরণ হিসাবে ওভাররাইড টুস্ট্রিং () এর মধ্যে স্ট্রিংবিল্ডার ব্যবহার করেছি।

    // return employee data
    public override string ToString()
    {
        StringBuilder buffer = new StringBuilder();
        buffer.AppendLine($"Number: {EmployeeNumber}");
        buffer.AppendLine($"Name: {EmployeeName}");
        buffer.AppendLine($"Address: {PostalAddress}");
        buffer.AppendLine($"Phone: {PhoneNumber}");
        buffer.AppendLine($"Age: {EmployeeAge}");
        buffer.AppendLine($"Gender: {EmployeeGender}");
        buffer.AppendLine($"Status: {EmployeeStatus}");
        buffer.AppendLine($"Manager: {EmployeeManager}");
        buffer.AppendLine($"Start: {EmployeeStartDate.ToShortDateString()}");
        return buffer.ToString();
    }

তাহলে কেন buffer.AppendFormat("{0}Number: {1}", Environment.NewLine, EmployeeNumber);???
টিএস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.