سؤال

أريد أن أصنع فئة عامة تقبل الفصول القابلة للتسلسل فقط ، هل يمكن أن يتم ذلك مع القيد؟

المفهوم الذي أبحث عنه هو:

public class MyClass<T> where T : //[is serializable/has the serializable attribute]
هل كانت مفيدة؟

المحلول

كلا ، لا أخشى. الأشياء الوحيدة التي يمكنك القيام بها بالقيود هي:

  • where T : class - يجب أن يكون T نوع مرجعي
  • where T : struct - يجب أن يكون T نوع قيمة غير قابل للفرق
  • where T : SomeClass - يجب أن يكون T someclass أو اشتق منه
  • where T : ISomeInterface - يجب أن يكون t isomeinterface أو تنفيذه
  • where T : new() - يجب أن يكون لدى T منشئًا عامًا بدون معلمة

مجموعات مختلفة ممكنة ، ولكن ليس كل شيء. لا شيء عن السمات.

نصائح أخرى

ما أعرفه ؛ لا يمكنك القيام بذلك. هل لديك على الرغم من إضافة طريقة "تهيئة" أو شيء مشابه؟

public void Initialize<T>(T obj)
{
     object[] attributes = obj.GetType().GetCustomAttributes(typeof(SerializableAttribute));
     if(attributes == null || attributes.Length == 0)
          throw new InvalidOperationException("The provided object is not serializable");
}

لم أختبر هذا الرمز ، لكنني آمل أن تحصل على وجهة نظري.

أخشى أنه لا. أفضل ما يمكنك القيام به هو فحص وقت التشغيل type.isserializable.

إذا كنت تبحث عن أي فصل قابل للتسلسل ، أعتقد أنك غير محظوظ. إذا كنت تبحث عن كائنات قمت بإنشائها ، فيمكنك إنشاء فئة أساسية قابلة للتسلسل ولديها كل فئة تريد دعمها.

أعلم أن هذا قديم ، لكنني أستخدم مُنشئًا ثابتًا للتحقق. إنه لاحقًا ولكنه يسمح لك برمي خطأ في وقت التشغيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top