C#মধ্যে Multiline স্ট্রিং লিটারাল




string shorthand (8)

সি # একটি multiline স্ট্রিং আক্ষরিক তৈরি করার জন্য একটি সহজ উপায় আছে?

আমি এখন আছে কি এখানে:

string query = "SELECT foo, bar"
+ " FROM table"
+ " WHERE id = 42";

আমি পিএইচপি জানি

<<<BLOCK

BLOCK;

সি # কিছু অনুরূপ আছে?


আপনি @ এবং " ব্যবহার করতে পারেন।

        string sourse = @"{
        ""items"":[
        {
            ""itemId"":0,
            ""name"":""item0""
        },
        {
            ""itemId"":1,
            ""name"":""item1""
        }
        ]
    }";

আপনি এই দুটি পদ্ধতি ব্যবহার করতে পারেন:

    private static String ReverseString(String str)
    {
        int word_length = 0;
        String result = "";
        for (int i = 0; i < str.Length; i++)
        {
            if (str[i] == ' ')
            {
                result = " " + result;
                word_length = 0;
            }
            else
            {
                result = result.Insert(word_length, str[i].ToString());
                word_length++;
            }
        }
        return result;
    }
//NASSIM LOUCHANI
    public static string SplitLineToMultiline(string input, int rowLength)
    {
        StringBuilder result = new StringBuilder();
        StringBuilder line = new StringBuilder();

        Stack<string> stack = new Stack<string>(ReverseString(input).Split(' '));

        while (stack.Count > 0)
        {
            var word = stack.Pop();
            if (word.Length > rowLength)
            {
                string head = word.Substring(0, rowLength);
                string tail = word.Substring(rowLength);

                word = head;
                stack.Push(tail);
            }

            if (line.Length + word.Length > rowLength)
            {
                result.AppendLine(line.ToString());
                line.Clear();
            }

            line.Append(word + " ");
        }

        result.Append(line);
        return result.ToString();
    }

SplitLineToMultiline () তে, আপনি যে স্ট্রিংটি ব্যবহার করতে চান এবং সারি দৈর্ঘ্যটি নির্ধারণ করতে হবে, এটি খুব সহজ। ধন্যবাদ .


আপনি যদি স্পেস / নতুন লাইন চান না, স্ট্রিং সংযোজন কাজ বলে মনে হয়:

var myString = String.Format(
  "hello " + 
  "world" +
  " i am {0}" +
  " and I like {1}.",
  animalType,
  animalPreferenceType
);
// hello world i am a pony and I like other ponies.

যদি আপনি চান উপরে here চালাতে পারেন।


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

    private string createTableQuery = "";

    void createTable(string tableName)
    {

         createTableQuery = @"CREATE TABLE IF NOT EXISTS
                ["+ tableName  + @"] (
               [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
               [Key] NVARCHAR(2048)  NULL, 
               [Value] VARCHAR(2048)  NULL
                                )";
    }

কেন মানুষ স্ট্রিং literals সঙ্গে বিভ্রান্তিকর স্ট্রিং রাখা? গৃহীত উত্তর একটি ভিন্ন প্রশ্নের একটি মহান উত্তর; এই এক না।

আমি জানি এটি একটি পুরানো বিষয়, তবে আমি এখানে সম্ভবত OP এর মত একই প্রশ্ন নিয়ে এসেছি, এবং এটি হতাশাজনক যে লোকেরা কীভাবে এটি ভুল করে চলেছে। অথবা হয়তো আমি এটা ভুল করছি, আমি জানি না।

মোটামুটি বলতে, একটি স্ট্রিং কম্পিউটার মেমরির একটি অঞ্চল যা একটি প্রোগ্রাম কার্যকর করার সময়, বাইটগুলির একটি ক্রম রয়েছে যা পাঠ্য অক্ষরগুলিতে ম্যাপ করা যেতে পারে। অন্যদিকে, একটি স্ট্রিং আক্ষরিক, সোর্স কোডের একটি অংশ, এখনও সংকলিত নয়, যা পরে প্রদর্শিত স্ট্রিংটি শুরু করার জন্য ব্যবহৃত মানের প্রতিনিধিত্ব করে যা প্রোগ্রামটি কার্যকর হয়।

সি #, বিবৃতিতে ...

 string query = "SELECT foo, bar"
 + " FROM table"
 + " WHERE id = 42";

... একটি তিন-লাইন স্ট্রিং কিন্তু একটি মাছ ধরার নৌকা উত্পাদন করে না ; তিনটি স্ট্রিং সংযোজন (প্রতিটি একটি ভিন্ন আক্ষরিক থেকে শুরু হয়) যার মধ্যে একটি নতুন লাইন সংশোধনকারী রয়েছে।

অপেক্ষাকৃত অপেক্ষাকৃত কমপক্ষে কী জিজ্ঞাসা করা হচ্ছে- অন্ততঃ আমি সেই শব্দগুলির সাথে কী জিজ্ঞাসা করবো- সংকলিত স্ট্রিংয়ে কীভাবে সোর্স কোড পাওয়া যায় তার লাইন বিরতিগুলি কীভাবে পরিচয় দিতে হয় তা নয়, তবে স্বচ্ছতার জন্য দীর্ঘমেয়াদী কীভাবে বিরতি দেওয়া যায়। , সংকলিত স্ট্রিং বিরতি সোর্স কোড টেক্সট টেক্সট একক। এবং একটি বর্ধিত নির্বাহ সময় প্রয়োজন ছাড়া, উত্স কোড থেকে আসছে একাধিক substrings যোগদান ব্যয়। জাভাস্ক্রিপ্ট বা C ++ এ একটি মাল্টিলাইন স্ট্রিং আক্ষরিক মধ্যে পিছনে ব্যাকস্ল্যাশ লেগেছে।

StringBuilder স্ট্রিং ব্যবহার করার পরামর্শ দেওয়া হচ্ছে, StringBuilder স্ট্রিং, স্ট্রিংকে String.Join স্ট্রিং রিভার্সালস এবং কোনটি না থাকলেও নেস্টেড ফাংশনগুলি যোগ করুন এবং আমার মনে হয় যে লোকেরা আসলেই প্রশ্নটি বুঝতে পারে না। অথবা হয়তো আমি এটা বুঝতে পারছি না।

যতদূর আমি জানি, সি # (অন্তত প্যালিওলথিক সংস্করণে যা আমি এখনও আগের দশকে ব্যবহার করছি) তেমন একটি বৈশিষ্ট্য রয়েছে যা মাল্টিলাইন স্ট্রিং লিটারেলগুলি পরিষ্কারভাবে তৈরি করতে পারে যা নির্বাহণের পরিবর্তে সংকলনের সময় সমাধান করা যেতে পারে।

সম্ভবত বর্তমান সংস্করণ এটি সমর্থন করে, কিন্তু আমি ভাঙা আমি স্ট্রিং এবং স্ট্রিং আক্ষরিক মধ্যে বোঝা পার্থক্য ভাগ চাই।


সাইড-নোট হিসাবে, C # 6.0 দিয়ে আপনি এখন ক্রিয়াপদযুক্ত স্ট্রিং শব্দের সাথে ইন্টারপোলেড স্ট্রিংগুলিকে একত্রিত করতে পারেন:

string camlCondition = [email protected]"
<Where>
    <Contains>
        <FieldRef Name='Resource'/>
        <Value Type='Text'>{(string)parameter}</Value>
    </Contains>
</Where>";

স্ট্রিং লিটারের স্ট্রিং ব্যবহার করার জন্য আরেকটি গোটচা দেখতে হবে। ফরম্যাট। যে ক্ষেত্রে আপনি কোঁকড়া ধনুর্বন্ধনী / বন্ধনী '{' এবং '}' এড়ানো প্রয়োজন।

// this would give a format exception
string.Format(@"<script> function test(x) 
      { return x * {0} } </script>", aMagicValue)
// this contrived example would work
string.Format(@"<script> function test(x) 
      {{ return x * {0} }} </script>", aMagicValue)

হ্যাঁ, আপনি প্রকৃত স্ট্রিংয়ে নতুন লাইনগুলি প্রবর্তন না করে একাধিক লাইনগুলিতে একটি স্ট্রিং আউট বিভক্ত করতে পারেন, তবে এটি চমত্কার:

string s = [email protected]"This string{
string.Empty} contains no newlines{
string.Empty} even though it is spread onto{
string.Empty} multiple lines.";

কৌতুকটি খালি মূল্যায়ন করে এমন কোডটি পরিচয় করিয়ে দিতে হয়, এবং সেই কোডটি আউটপুটকে প্রভাবিত না করে নতুন লাইন ধারণ করতে পারে। আমি এই উত্তর থেকে অনুরূপ প্রশ্ন এই অভিযোজন অভিযোজিত।

প্রশ্নটি আসলে কিছুটা বিভ্রান্তি আছে, তবে এখানে দুটি ইঙ্গিত রয়েছে যা আমরা এখানে চাই এমন একটি স্ট্রিং আক্ষরিক যা কোনও নতুন অক্ষর ধারণ করে না, যার সংজ্ঞা একাধিক লাইন স্প্যানিশ করে। (মন্তব্যগুলিতে তিনি বলেছেন, এবং "এখানে আমার যা আছে" কোড দেখায় যা এতে নতুন লাইন সহ একটি স্ট্রিং তৈরি করে না)

এই ইউনিট পরীক্ষা উদ্দেশ্য দেখায়:

    [TestMethod]
    public void StringLiteralDoesNotContainSpaces()
    {
        string query = "hi"
                     + "there";
        Assert.AreEqual("hithere", query);
    }

ক্যোয়ারীর উপরের সংজ্ঞাটি পরিবর্তন করুন যাতে এটি একটি স্ট্রিং আক্ষরিক হয়, পরিবর্তে দুটি স্ট্রিং লিটারালের সংযোজন যা কম্পাইলার দ্বারা অপ্টিমাইজ করা যেতে পারে বা নাও হতে পারে।

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

এমন একমাত্র বিকল্প রয়েছে যা কম্পাইলার অপ্টিমাইজেশানগুলির উপর নির্ভর করে না যা ঘটতে পারে না, যা আপনার লাইনকে একটি রেখার উপর রাখে। আপনি কম্পাইলার অপ্টিমাইজেশান উপর নির্ভর করতে চান, + আপনি ইতিমধ্যে মহান আছে; আপনাকে স্ট্রিংটি বাম-অ্যালাইন করতে হবে না, ফলাফলের মধ্যে আপনি নতুন লাইন পাবেন না এবং এটি কেবলমাত্র একটি অপারেশন, কোনও ফাংশন কল নয়, যাতে অপ্টিমাইজেশন আশা করা যায়।








shorthand