有没有比以下更好的方法?
特别是,我想Activator
用其他东西替换.
public static ListToList (DataTable dt) { Type type = typeof(T); List list = new List (); foreach (DataRow dr in dt.Rows) { object[] args = new object[1]; args[0] = dr; list.Add((T)Activator.CreateInstance(type, args)); } return list; }
Joel Coehoor.. 6
我想提到的第一件事是你可能不需要列表.赔率是,IEnumerable足够了.即使你确实需要一个列表,将IEnumerable转换为列表也是微不足道的.
考虑到这一点,这段代码是实现它的一种很好的通用方法:
public static IEnumerableToEnumerable (DataTable dt, Func translator) { foreach(DataRow dr in dt.Rows) { yield return translator(dr); } }
希望你能看到它的可重用性.您需要做的就是提供一个知道如何将单个DataRow转换为T类型的函数.该函数可能使用Activator,但它不必.它可能只使用普通的构造函数并设置一些属性.
我想提到的第一件事是你可能不需要列表.赔率是,IEnumerable足够了.即使你确实需要一个列表,将IEnumerable转换为列表也是微不足道的.
考虑到这一点,这段代码是实现它的一种很好的通用方法:
public static IEnumerableToEnumerable (DataTable dt, Func translator) { foreach(DataRow dr in dt.Rows) { yield return translator(dr); } }
希望你能看到它的可重用性.您需要做的就是提供一个知道如何将单个DataRow转换为T类型的函数.该函数可能使用Activator,但它不必.它可能只使用普通的构造函数并设置一些属性.