البرمجة

تحسين التحكم في طول السلاسل في C# باستخدام فئة FixedString

في بيئة لغة البرمجة C#، يعتبر استخدام سلاسل النصوص بأطوال ثابتة متطلبًا شائعًا عند التعامل مع تسلسل البيانات. تظهر حاجتك لتحسين هذه العملية وتجنب كتابة شروط الحراسة لكل قيمة. تسعى إلى إيجاد حلاً يتيح لك تحديد طول السلسلة بشكل ثابت أثناء التصميم، وترغب في استخدامه بشكل مشابه للتعريف التالي:

csharp
public FixedString<5> CompanyNumber { get; set; }

لتحقيق هذا الهدف، يمكنك استخدام تقنية الجنريكس في C# لإنشاء نوع مخصص يتيح لك تحديد طول السلسلة بشكل ديناميكي أثناء الاستخدام. يمكنك تعريف نوع FixedString بشكل مشابه للشيفرة التي قدمتها، ولكن مع قابلية تحديد الطول كنوع جنريك:

csharp
public class FixedString<TLength> { private string m_FixedString; public FixedString(string value) { int maxLength = typeof(TLength) == typeof(int) ? Convert.ToInt32(typeof(TLength).GetProperty("MaxValue").GetValue(null)) : 0; if (value.Length > maxLength) { throw new StringToLongException($"The FixedString value may consist of {maxLength} characters", "value"); } m_FixedString = value; } public static implicit operator FixedString<TLength>(string value) { return new FixedString(value); } public override string ToString() { int maxLength = typeof(TLength) == typeof(int) ? Convert.ToInt32(typeof(TLength).GetProperty("MaxValue").GetValue(null)) : 0; return m_FixedString.PadLeft(maxLength, ' '); } }

تحدد الجملة FixedString الطول باستخدام نوع جنريك TLength. يتيح لك استخدامه كنوع تابع في خصائص الكائنات الأخرى، مما يسمح لك بتحديد الطول بشكل محدد أثناء الاستخدام، كما هو موضح في المثال التالي:

csharp
public FixedString<5> CompanyNumber { get; set; }

تكون هذه الطريقة تحسينًا على الشيفرة السابقة وتتيح لك تحديد الطول بشكل أفضل في وقت التصميم.

المزيد من المعلومات

في مقالتي الحالية، سأستكشف الحاجة إلى استخدام كائن String بطول ثابت في لغة البرمجة C# وكيف يمكن تحسين الطريقة التي تم بها تنظيم وتحكم في طول السلاسل في البرنامج. يظهر الرمز الحالي أن لديك فصولًا تقوم فيها بالتحقق من وتنسيق سلاسل النصوص لضمان وجود طول ثابت. هذا قد يكون متعبًا وقابلاً للخطأ، ولهذا السبب تقدمت بفكرة جديدة.

قمت بتطوير فئة جديدة تسمى “FixedString” تتيح لك تحديد الطول المطلوب للسلسلة أثناء تعريف الخاصية. يمكنك تحديد الطول المرغوب كمعامل للفئة الجديدة، مما يجعل الكود أكثر قراءة وسهولة في الصيانة. في هذه الفئة، تم تجنب الحاجة إلى الحراسات في كل مرة يتم فيها تعيين قيمة جديدة.

public class FixedString<T>
{
    private string m_FixedString;

    public FixedString(string value)
    {
        if (value.Length > T)
        {
            throw new StringToLongException($"The FixedString value may consist of {T} characters", "value");
        }
        m_FixedString = value;
    }

    public static implicit operator FixedString<T>(string value)
    {
        FixedString<T> fsv = new FixedString<T>(value);
        return fsv;
    }

    public override string ToString()
    {
        return m_FixedString.PadLeft(T, ' ');
    }
}

public class MyClass
{
    public FixedString<5> CompanyNumber { get; set; }
    // إضافة المزيد من الخصائص هنا
}

هذا النهج يقلل من التكرار في الشيفرة، حيث لا يلزمك بكتابة حارس لكل خاصية. بدلاً من ذلك، يتم التحقق من الشرط مرة واحدة في الفئة المخصصة “FixedString”. يمكنك الآن استخدام هذه الفئة في مختلف الخصائص دون الحاجة إلى كتابة الشرط مرارًا وتكرارًا، مما يوفر على المطور وقتًا ويقلل من فرص الخطأ.

زر الذهاب إلى الأعلى