Why do you want to avoid iteration?
If it is to reduce code, use LINQ (technically still iterates, but looks less like it's doing that):
List<object> x = new List<object>();
DataTable d = new DataTable();
d.Columns.Add("item");
x.ForEach((item) => d.Rows.Add(item));
If you want to avoid the immediate performance hit of processing each item, you can derive a class from DataTable that wraps a List internally:
public class MyDataTable<T> : DataTable
{
private List<T> internalList { get; set; }
public MyDataTable(List<T> p_internalList)
{
this.internalList = p_internalList;
}
}
Pretty sure that wrapping technique is also used with the ReadOnlyCollection returned from List.AsReadOnly().