【发布时间】:2012-09-26 07:35:56
【问题描述】:
我有点困惑
场景:
我想创建一个 DataTable 的副本以添加到另一个 DataSet。有两种方法可以做到(AFAIK):
1. Make a Copy using DataTable.Copy()
2. Make a Deep Clone using
public static T DeepClone<T>(this T source)
{
if (!typeof(T).IsSerializable)
throw new ArgumentException("The type must be serializable.", "source");
// Don't serialize a null object, simply return the default for that object
if (Object.ReferenceEquals(source, null))
return default(T);
IFormatter formatter = new BinaryFormatter();
Stream stream = new MemoryStream();
using (stream)
{
formatter.Serialize(stream, source);
stream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(stream);
}
}
我的困惑:
- 还有其他方法吗?
- 哪个更好,为什么?
-
DataTable.Copy()内部是否使用DeepClone或其他一些 逻辑?
【问题讨论】:
-
你为什么不把一个合并到另一个?我认为合并是做到这一点的方法。我在你的问题中遗漏了什么吗? msdn.microsoft.com/en-us/library/aa984388(v=vs.71).aspx
-
实际上我想用选择性数据表创建一个数据集副本。
-
@TimSchmelter:他提到了
Copy而不是Clone -
也许最好使用 LINQ-To-DataSet 和
CopyToDataTable来过滤您的DataSet。但是,我们需要更多信息。 @CuongLe:我刚看到,谢谢。 -
@TimSchmelter:但
CopyToDataTable在没有要复制到数据表的数据行时容易出现异常。 msdn.microsoft.com/en-us/library/bb396189.aspx