كيف أقوم بإنشاء طريقة تحول dataRowCollection إلى مجموعة من الكائنات من نوع عام في C#؟

StackOverflow https://stackoverflow.com/questions/2809419

  •  25-09-2019
  •  | 
  •  

سؤال

أحاول إنشاء طريقة تأخذ dataTable أو dataRowCollection وتحويلها إلى مجموعة من نوع عام. شيء من هذا القبيل:

    public static T[] ConvertToArray<T>(DataTable dataTable)
    {
        List<T> result = new List<T>();

        foreach (DataRow dataRow in dataTable.Rows)
            result.Add((T)dataRow);

        return result.ToArray();
    }

المشكلة هي هذا الخط

result.Add((T)dataRow);

الذي يعطي لا يمكن تحويل system.data.datarow إلى T.

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

لذا فإن السؤال الآن ، كيف يمكنني سحب هذا باستخدام الأدوية الجيلية؟

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

المحلول

يمكنك استخدام كائن يوفر التحويل على dataRow إلى نوعك:

public interface IDataRowConverter<T>
{
    T Convert(DataRow row);
}

قدم محولك المخصص إلى وظيفتك:

public static T[] ConvertToArray<T>(DataTable dataTable, IDataRowConverter<T> converter)
{
    List<T> result = new List<T>();

    foreach (DataRow dataRow in dataTable.Rows)
        result.Add(converter.Convert(dataRow));

    return result.ToArray();
}

ثم ، قم بتنفيذ الواجهة لنوعك المطلوب:

public class MyObjectDataRowConverter : IDataRowConverter<MyObject>
{
    public MyObject Convert(DataRow row)
    {
        MyObject myObject = new MyObject();

        // Initialize object using the row instance

        return myObject;
    }
}

يمكنك بعد ذلك الاتصال بوظيفتك باستخدام هذا الرمز:

MyObject[] objectArray = 
    ConvertToArray<MyObject>(datatable, new MyObjectDataRowConverter());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top