相关疑难解决方法(0)

C#ISerializable问题

我打算用序列化做克隆.我必须让我的课程ISerializable.但是它的超级类和所有引用的变量类呢?我需要将它们全部变为ISerializable吗?

如果我使用ISerializable.我必须实现GetObjectData(),我应该放在该方法中?把它留空是好的吗?

c#

3
推荐指数
1
解决办法
9067
查看次数

c#我如何以编程方式创建表单的副本?

我正在使用winforms与visual studio 2008.

我想用控件和所有事件创建一个我的表单的EXACT副本,以及我所拥有的所有相同代码.

这可以在运行时做吗?我该怎么办?

不应该有某种类解决方案,如:

Form form2 = new Form();
form2 = form1 ???
Run Code Online (Sandbox Code Playgroud)

.net c# .net-3.5 winforms

3
推荐指数
1
解决办法
2878
查看次数

为什么C#/ .Net不使用克隆范式?

我很惊讶在C#中复制集合对象是多么麻烦,特别是如果你想要一个深层复制.有没有一个很好的设计理由为什么.Net没有采用Java clone()路由,是否有一些我在C#/ .Net中错过的等效范例?

.net c# programming-languages

2
推荐指数
1
解决办法
153
查看次数

如何克隆微软图表控件?

克隆Microsoft Chart Control对象的推荐方法是什么?因为它是第三方库,所以我无法使用此处提到的解决方案,因为我无法将对象标记为可序列化.

优选地,我不想引入任何第三方控件来克隆图表,除非如果没有一个是绝对不可能的话.

.net c# charts clone winforms

2
推荐指数
1
解决办法
3301
查看次数

创建List <t>的副本,而不参考原始文件

我知道这已经被覆盖了,但从我在帖子中理解的这应该有效.

示例代码:

我有一个自定义类型:

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)

它从两个列表中删除

除非我完全遗漏了这篇文章,否则我应该能够更改副本列表,而不会影响原始文件.

c# reference

2
推荐指数
1
解决办法
2万
查看次数

如何克隆HttpPostedFile

我有一个允许用户上载文件的应用程序,在保存文件之前,已使用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# asp.net

2
推荐指数
1
解决办法
1884
查看次数

如何在同一个对象中将值从一个属性复制到另一个属性?

我是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()函数来保存的价值intArrayint1.我知道使用"="会引用原始属性,一旦原始属性的值发生变化,副本也会发生变化.如何制作与原始属性不同的副本?

c#

2
推荐指数
1
解决办法
83
查看次数

Linq 的 IEnumerable.Select 是否返回对原始 IEnumerable 的引用?

我试图在我的代码中克隆一个 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

该方法是通过使用延迟执行来实现的。立即返回值是一个存储执行操作所需的所有信息的对象。在通过直接调用其 …

.net c# linq

2
推荐指数
1
解决办法
5375
查看次数

List <>集合成员在不应该更改时更改

我有一个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)

.net c# list data-structures

1
推荐指数
1
解决办法
307
查看次数

为什么我的第二个变量值在更新第一个时会发生变化?

我有一个带有两个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)

c# class access-levels

1
推荐指数
1
解决办法
488
查看次数