我打算用序列化做克隆.我必须让我的课程ISerializable.但是它的超级类和所有引用的变量类呢?我需要将它们全部变为ISerializable吗?
如果我使用ISerializable.我必须实现GetObjectData(),我应该放在该方法中?把它留空是好的吗?
我正在使用winforms与visual studio 2008.
我想用控件和所有事件创建一个我的表单的EXACT副本,以及我所拥有的所有相同代码.
这可以在运行时做吗?我该怎么办?
不应该有某种类解决方案,如:
Form form2 = new Form();
form2 = form1 ???
Run Code Online (Sandbox Code Playgroud) 我很惊讶在C#中复制集合对象是多么麻烦,特别是如果你想要一个深层复制.有没有一个很好的设计理由为什么.Net没有采用Java clone()路由,是否有一些我在C#/ .Net中错过的等效范例?
我知道这已经被覆盖了,但从我在帖子中理解的这应该有效.
示例代码:
我有一个自定义类型:
public class MyType
{
public List<MySubType> Movie { get; set; }
public List<int> Ranks { get; set; }
public string Location { get; set; }
public string Released { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我创建一个这种类型的List
List<MyType> myMovies = new List<MyType>();
Run Code Online (Sandbox Code Playgroud)
稍后在代码中我需要创建此列表的副本并更改它而不影响原始列表.
List<MyType> copyMovies = new List<MyType>(myMovies);
Run Code Online (Sandbox Code Playgroud)
但现在如果我从copyMovies中的列表中删除
copyMovies.Movie.RemoveAt(x);
Run Code Online (Sandbox Code Playgroud)
它从两个列表中删除
除非我完全遗漏了这篇文章,否则我应该能够更改副本列表,而不会影响原始文件.
我有一个允许用户上载文件的应用程序,在保存文件之前,已使用Symantec保护引擎对其进行了扫描。我遇到的问题是,使用保护引擎扫描文件后,它们的字节数为0。我正在尝试解决这个问题。
我尝试了这里提到的克隆解决方案: 深度克隆对象,但是我上传的文件并非全部可序列化。我还尝试过在扫描引擎类中将流重置为0,然后再将其传递回保存。
我已经与Symantec联系,他们说为此应用程序编写的自定义连接类看起来正确,并且保护引擎没有抛出错误。
我愿意解决这个问题。
这是文件上传的代码:
private void UploadFiles()
{
System.Web.HttpPostedFile objFile;
string strFilename = string.Empty;
if (FileUpload1.HasFile)
{
objFile = FileUpload1.PostedFile;
strFilename = FileUpload1.FileName;
if (GetUploadedFilesCount() < 8)
{
if (IsDuplicateFileName(Path.GetFileName(objFile.FileName)) == false)
{
if (ValidateUploadedFiles(FileUpload1.PostedFile) == true)
{
//stores full path of folder
string strFileLocation = CreateFolder();
//Just to know the uploading folder
mTransactionInfo.FileLocation = strFileLocation.Split('\\').Last();
if (ScanUploadedFile(objFile) == true)
{
SaveFile(objFile, strFileLocation);
}
else
{
lblErrorMessage.Visible = true;
if (mFileStatus != null)
{ lblErrorMessage.Text = mFileStatus.ToString(); …Run Code Online (Sandbox Code Playgroud) 我是C#的新手,我想将一个属性的值复制到另一个属性.以下是我写的示例代码:
public class MyObject
{
private MyObject()
{
intArray = new int[3]{1,2,3}
int1 = 1;
SaveCopy();
}
private void SaveCopy()
{
intArray_Copy = intArray;
int1_Copy = int1;
}
public int[] intArray { get; set; }
public int int1 { get; set; }
public int[] intArray_Copy { get; set; }
public int int1_Copy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我写一个SaveCopy()函数来保存的价值intArray和int1.我知道使用"="会引用原始属性,一旦原始属性的值发生变化,副本也会发生变化.如何制作与原始属性不同的副本?
我试图在我的代码中克隆一个 List,因为我需要将该 List 输出到其他一些代码,但原始引用稍后将被清除。所以我有了使用Select扩展方法来创建IEnumerable对相同元素的新引用的想法,例如:
List<int> ogList = new List<int> {1, 2, 3};
IEnumerable<int> enumerable = ogList.Select(s => s);
Run Code Online (Sandbox Code Playgroud)
现在做完之后ogList.Clear(),我惊讶地发现我的新枚举也是空的。
所以我开始在 LINQPad 中摆弄,发现即使我Select完全返回不同的对象,行为也是一样的。
List<int> ogList = new List<int> {1, 2, 3};
IEnumerable<int> enumerable = ogList.Select(s => 5); // Doesn't return the original int
enumerable.Count().Dump(); // Count is 3
ogList.Clear();
enumerable.Count().Dump(); // Count is 0!
Run Code Online (Sandbox Code Playgroud)
请注意,在 LINQPad 中,Dump()s 等效于Console.WriteLine().
现在可能我首先需要克隆列表是由于糟糕的设计,即使我不想重新考虑设计,我也可以轻松地正确克隆它。但这让我开始思考Select扩展方法实际上做了什么。
根据该文件为Select:
该方法是通过使用延迟执行来实现的。立即返回值是一个存储执行操作所需的所有信息的对象。在通过直接调用其 …
我有一个List,我已经在控制台项目的main方法中填充了.我这一人群传递给其目的是要采取人口的两名成员和分解的方式来创建稍后将加入人口两个新的唯一成员重新组合它们的方法.
然而,当我操纵两个原始成员来创建两个新的独特成员时,两个原始成员在初始人口中改变(因此改变了初始人口).这意味着当我去添加新成员时,我得到重复的条目列表.
我没有做任何过于复杂的事情我认为我只是在做一些愚蠢的事情.
有没有人知道为什么会这样?
以下是调用以选择初始化两个人口成员的方法:
public static List<Chromosome<Gene>> runEpoch(Random rand, List<Chromosome<Gene>> population, SelectionMethod selectionMethod)
{
int populationSize = population.Count;
int selectionCount = (int)Math.Truncate((population.Count * 0.75));
if (selectionMethod == SelectionMethod.Tournament)
{
for (int i = 0; i < selectionCount; i++)
{
Chromosome<Gene> parent = selection.runTournament(rand, population);
Chromosome<Gene> parentTwo = selection.runTournament(rand, population);
//Checks for the presence of incestuous mating. In some cases incestuous mating causes a stack overflow to occur that the program can not recover from
if (parent != parentTwo)
{ …Run Code Online (Sandbox Code Playgroud) 我有一个带有两个Datalog类变量的Form
public partial class ModifyDataForm : Form
{
public DataLog DLog;
private DataLog copyCurrent;
public ModifyDataForm(DataLog log, int selectIndex = 0)
{
InitializeComponent();
DLog = (DataLog)log.Clone();
copyCurrent = (DataLog)log.Clone();
}
}
Run Code Online (Sandbox Code Playgroud)
当我更新DLog的值时,copyCurrent的值也会改变,为什么?
我更新变量的函数如下
private void smooth_Click(object sender, EventArgs e)
{
int NValues; int POrder;
if (getSmoothParameters(out NValues, out POrder))//parameters are valid
{
float[] yvalues = DataLog.convertStringArrayToFloats(DLog.Data[labelIndex]);
float[] newyvalues = Filters.smooth.SavitzkyGolay(yvalues, NValues, POrder);
//I am updating the values of DLog here,
//but the values of copyCurrent also changes
DLog.Data[labelIndex] = Array.ConvertAll(newyvalues, …Run Code Online (Sandbox Code Playgroud)