سؤال

ولقد يبدو أنه قد ذهب إلى أسفل حفرة أرنب. وأود أن تحويل البيانات من قواعد البيانات ADO. NET إلى نوع قيم الفارغة. في البداية أنا افترض أن يلقي على التوالي (كثافة العمليات؟) من شأنه أن يفعل ذلك. كيف ساذجة كنت. خطأ، خطأ سيئة. الآن أنا أحاول أن أكتب تحويل عام ولكن أنا الحصول على التعلق على بناء الجملة. وهذا هو الحال 2005 - شخص ما يجب أن يكون حل هذه المشكلة بالفعل. هل؟

ووشنق هو أنه عندما أحاول أن استخدام نوع قيم الفارغة كما في القيد على تحويل أحصل على خطأ في بناء الجملة:

public class NullableDBConversion
{
  public static T Convert<T>(object testValue) where T : Nullable<T>
  {
    if (testValue is DBNull)
    {
      return new Nullable<T>();
    }

    return new Nullable<T>((T)testValue);
  }
}

والهدف يكون أسلوب واحد باستخدام الأدوية للقيام بكل التحويلات. هل هذا ممكن أو لا بد لي أن أكتب عدة.

هل كانت مفيدة؟

المحلول

وT : Nullable<T> لا تجعل حقا معنى كقيد - التفكير في ما T يجب أن يكون. لا يمكن أن تكون قيم الفارغة في حد ذاته. هل يمكن أن يكون لديك:

where T : Nullable<U> where U : struct

ولكن ذلك سيكون غامضا إلى حد ما. أعتقد أنه من الأسهل لجعل T نوع غير قيم الفارغة وتشير فقط إلى Nullable<T>. أعتقد أنك تريد هذا:

public static Nullable<T> Convert<T>(object testValue) where T : struct
{
    return testValue is DBNull ? null : new Nullable<T>((T)testValue);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top