كيفية القيام بما يلي: سَلسَلة السلاسل المتعددة (دليل البرمجة لـ #C)

السَلسَلة هي عملية إلحاق سلسلة واحدة إلى نهاية سلسلة أخرى. عندما تقوم بسَلسَلة سلسلة حرفية أو ثوابت السلسلة باستخدام عامل التشغيل + يقوم المحول البرمجي بإنشاء سلسلة مفردة. لم يحدث تسلسل في وقت التشغيل. ومع ذلك، يمكن سَلسَلة متغيرات السلسلة في وقت التشغيل فقط. في هذه الحالة، يجب فهم ضمانات الأداء في الطرق المختلفة.

مثال

يوضح المثال التالي كيفية تقسيم سلسلة حرفيه طويلة إلى سلاسل أصغر لتحسين قابلية القراءة في التعليمات البرمجية للمصدر. سيتم سَلسَلة هذه الأجزاء إلى سلسلة واحدة في وقت التحويل البرمجي. لا يوجد أي تكلفة للأداء في وقت التشغيل بغض النظر عن عدد السلاسل المتضمنة.

static void Main()
{
    // Concatenation of literals is performed at compile time, not run time.
    string text = @"Historically, the world of data and the world of objects " +
    "have not been well integrated. Programmers work in C# or Visual Basic " +
    "and also in SQL or XQuery. On the one side are concepts such as classes, " +
    "objects, fields, inheritance, and .NET Framework APIs. On the other side " +
    "are tables, columns, rows, nodes, and separate languages for dealing with " +
    "them. Data types often require translation between the two worlds; there are " +
    "different standard functions. Because the object world has no notion of query, a " +
    "query can only be represented as a string without compile-time type checking or " +
    "IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to " +
    "objects in memory is often tedious and error-prone.";

    Console.WriteLine(text);
}

لسَلسَلة متغيرات السلاسل يمكنك استخدام عامل التشغيل + أو += ، أو الأساليب String.Concat أو String.Format أو StringBuilder.Append. +العامل هو سهلة استخدم ويجعل للتعليمات البرمجية بديهية. حتى إذا كنت تستخدم عدة + عوامل تشغيل في عبارة واحدة، محتوى سلسلة هو نسخ مرة واحدة فقط. ولكن إذا كرر هذه تشغيل عدة مرة/مرات، من أجل مثال في تكرار حلقي، قد يسبب مشاكل في الكفاءة. على سبيل المثال، انظر إلى التعليمات البرمجية التالية:

static void Main(string[] args)
{
    // To run this program, provide a command line string.
    // In Visual Studio, see Project > Properties > Debug.
    string userName = args[0];
    string date = DateTime.Today.ToShortDateString();

    // Use the + and += operators for one-time concatenations.
    string str = "Hello " + userName + ". Today is " + date + ".";
    System.Console.WriteLine(str);

    str += " How are you today?";
    System.Console.WriteLine(str);

    // Keep the console window open in debug mode.
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
}

// Example output: 
//  Hello Alexander. Today is 1/22/2008.
//  Hello Alexander. Today is 1/22/2008. How are you today?
//  Press any key to exit.
//

ملاحظة

في عمليات سَلسَلة السلاسل، يعامل المحول البرمجي لـ #C سلسلة null كسلسلة فارغة ولكن لا يقوم المحول البرمجي بتحويل القيمة الأصلية لسلسلة null.

إن لم تقم بسَلسَلة عدد كبير من السلاسل (على سبيل المثال، في تكرار حلقي)، لن تكون لتكلفة الأداء لهذه التعليمات البرمجية شيئاً يُذكر. ونفس الحكم يكون صحيحاً للأساليب String.Concat و String.Format.

ومع ذلك، عندما يكون الأداء مهماً يجب عليك دوماً استخدام فئة StringBuilder لسَلسَلة السلاسل. تستخدم التعليمات البرمجية التالية الأسلوب Append من فئة StringBuilder لسَلسَلة السلاسل بدون التأثير التسلسلي الناتج عن عامل التشغيل +.

class StringBuilderTest
{
    static void Main()
    {
        string text = null;

        // Use StringBuilder for concatenation in tight loops.
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        for (int i = 0; i < 100; i++)
        {
            sb.AppendLine(i.ToString());
        }
        System.Console.WriteLine(sb.ToString());

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
// Output:
// 0
// 1
// 2
// 3
// 4
// ...
//

راجع أيضًا:

المرجع

السلاسل (البرمجة C# إرشادات)

String

StringBuilder

المبادئ

دليل البرمجة لـ #C