Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

คลาส System.String หรือ System.Text.StringBuilder ไหนดีกว่าใน C #


ความแตกต่างหลักคือ StringBuilder เปลี่ยนแปลงได้ ในขณะที่ สตริงไม่เปลี่ยนรูป

สตริงนั้นเปลี่ยนไม่ได้, ไม่เปลี่ยนรูปหมายความว่าถ้าคุณสร้างวัตถุสตริง คุณจะไม่สามารถแก้ไขมันได้ และสร้างวัตถุประเภทสตริงใหม่ในหน่วยความจำเสมอ

ในทางกลับกัน StringBuilder นั้นไม่แน่นอน หมายความว่า หากเราสร้างวัตถุตัวสร้างสตริง เราก็สามารถดำเนินการใดๆ เช่น แทรก แทนที่ หรือผนวกโดยไม่ต้องสร้างอินสแตนซ์ใหม่ทุกครั้ง มันจะอัปเดตสตริงที่เดียวในหน่วยความจำไม่สร้างพื้นที่ใหม่ในหน่วยความจำ

ตัวอย่าง

using System;
using System.Text;
class DemoApplication{
   public static void Main(String[] args){
      String systemString = "Hello";
      StringConcat(systemString);
      Console.WriteLine("String Class Result: " + systemString);
      StringBuilder stringBuilderString = new StringBuilder("Hello");
      StringBuilderConcat(stringBuilderString);
      Console.WriteLine("StringBuilder Class Result: " + stringBuilderString);
   }
   public static void StringConcat(String systemString){
      String appendString = " World";
      systemString = String.Concat(systemString, appendString);
   }
   public static void StringBuilderConcat(StringBuilder stringBuilderString){
      stringBuilderString.Append(" World");
   }
}

ผลลัพธ์

ผลลัพธ์ของตัวอย่างข้างต้นมีดังนี้ −

String Class Result: Hello
StringBuilder Class Result: Hello World
  • การใช้เมธอด StringConcat:ในวิธีนี้ เรากำลังส่งสตริง "สวัสดี" และดำเนินการ "systemString =String.Concat(systemString, appendString);" โดยที่ appendString คือ "โลก" ที่จะต่อกัน สตริงที่ส่งจาก Main() ไม่มีการเปลี่ยนแปลง เนื่องจาก String ไม่เปลี่ยนรูป . การเปลี่ยนแปลงค่าของสตริงจะสร้างวัตถุอื่นและ systemString ใน StringConcat() เก็บข้อมูลอ้างอิงของสตริงใหม่ . แต่ระบบอ้างอิงสตริงใน Main() และ StringConcat() อ้างอิงถึงสตริงที่แตกต่างกัน

  • การใช้เมธอด StringBuilderConcat:ในวิธีนี้ เรากำลังส่งสตริง “สวัสดี” และดำเนินการ “stringBuilderString.Append(" World");” ซึ่งเปลี่ยนค่าที่แท้จริงของสตริง (ใน Main) เป็น "Hello World" นี่เป็นเพราะข้อเท็จจริงง่ายๆ ที่ StringBuilder เปลี่ยนแปลงได้และด้วยเหตุนี้จึงเปลี่ยนค่า