كيف أقوم بإنشاء طريقة تحول dataRowCollection إلى مجموعة من الكائنات من نوع عام في C#؟
سؤال
أحاول إنشاء طريقة تأخذ 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());
لا تنتمي إلى StackOverflow