相关疑难解决方法(0)

列出持有参考

我有一个对象的List(在C#中)(我创建的类).我能够使用列表,但问题是我只创建(实例化我认为是正确的术语)我的一个对象类,并且我继续将它添加到列表中,即使该对象的属性随着代码的迭代而改变.我希望能够将硬编码对象添加到我的列表而不是参考对象.

这是我目前正在做的事情:

public class SaveData
{
    public double save_property1;
    public double save_property2;    
}

in the application

SaveData newSaveData = new SaveData();
List<SaveData> newSaveDataList = new List<SaveData>;

if ( some condition)
{
    newSaveData.save_property1 = x
}

if (some condition 2) 
{
    newSaveData.save_property2 = y 
    newSaveDataList.Add(SaveData);  // 
}
Run Code Online (Sandbox Code Playgroud)

由于X和Y在迭代中发生变化,我希望SaveDate我添加到列表中的对象不会随着每次迭代而改变(因此我可以保留Data对象的历史记录),即硬编码而不是用作参考.

c#

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

使用不同的命名空间复制两个相同的对象(递归反射)

我在c#中工作,有几个工作区有一个特定的类,在每个工作区中它总是相同的.我希望能够拥有此类的副本,以便能够使用它而无需处理命名空间差异.例如:

namespace1 {
    class class1{
        public class2;
    }

    class class2{
        public string;
    }

}

namespace2 {
    class class1{
        public class2;
    }

    class class2{
        public string;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我复制的类中,我有一个函数将所有数据复制到命名空间的类之一.如果我只有c#标准类型,它会工作.一旦我处理class2对象(也来自不同的命名空间),我得到了exeption("对象与目标类型不匹配.")

public Object toNamespaceClass(Object namespaceClass)
{
    try
    {
        Type fromType = this.GetType();
        Type toType = namespaceClass.GetType();

        PropertyInfo[] fromProps = fromType.GetProperties();
        PropertyInfo[] toProps = toType.GetProperties();

        for (int i = 0; i < fromProps.Length; i++)
        {
            PropertyInfo fromProp = fromProps[i];
            PropertyInfo toProp = toType.GetProperty(fromProp.Name);
            if (toProp != null)
            {
                toProp.SetValue(this, fromProp.GetValue(namespaceClass, null), null);
            }
        } …
Run Code Online (Sandbox Code Playgroud)

c# reflection

3
推荐指数
2
解决办法
5600
查看次数

如何创建一个List <>成员不可变的类?

例如

class School
{
    public List<Student> Students {get; private set;}
}
Run Code Online (Sandbox Code Playgroud)

School不是不可变的,因为getter Students是一个可变的集合.如何使类不可变?

c# immutability

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

按值传递接口成员

    public void MethodSample1(Itest variable)
    {
        variable.TestString = "some sample data";
        Itest var1 = variable;
        Console.WriteLine(variable.TestString);
        MethodSample2(variable);
        Console.WriteLine(variable.TestString);
        Console.WriteLine(var1.TestString);

    }

    public void MethodSample2(Itest variable)
    {
        variable.TestString = "testdata";
    }

    public interface Itest
    {
      string TestString { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

预计两个控制台输出行都打印"一些样本数据",但似乎TestString是被新值覆盖了?是不是"默认情况下在C#中所有的值都按值传递?".

总之,如何保存"TestString"的值MethodSample1

(我遇到了这个问题,因为我的所有项目都基于单个界面)

即使保留了价值,它确实反映了!奇怪!

.net c# .net-4.0 visual-studio-2010

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

C#对象复制说明?

在开始之前,我知道还有其他几个问题可以"回答"这个问题,但不是我能够理解的方式.这就是我所指的: C#中的深度复制

为什么在C#中复制是个糟糕的主意

我做了一些研究,我希望有人可以向我解释如何将对象设置为另一个对象的值.

例如,让我们说:

myObject bob;
bob = new myObject();
myObject joe
joe = bob
Run Code Online (Sandbox Code Playgroud)

从我可以研究的,joe现在指向鲍勃的实例bob.这些物体是否仍然独立运作?

我如何创建两个对象,将一个对象的内容复制到另一个对象,并将它们作为两个单独的对象,其字段,方法和事件分别发生?

我很抱歉再次提出这个问题,但我似乎找不到其他地方对我有意义的解释.

.net c# copy class object

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

单个类是否可以进行深层复制

参考与使用扩展方法为类创建深层复制方法相关的堆栈溢出讨论,该方法不需要[Serializable]属性:

如何在.NET中执行对象的深层复制(特别是C#)?

我拥有的类是一个单例类,它是一个旧的实现:

  • 我是否可以创建相同的深层副本,我理解这是不可能的,但试图理解,如果在这种典型场景中有可能的解决方法.我知道对我来说其他选择是将类更改为非单例,但在我们当前的设计和用法中,这将是很多工作并且可能导致许多问题.

  • 此外,当前类还有多个其他自定义类被引用,因此当我要进行深层复制时,尤其是Alex Burtsev在以下代码中的方式:

https://raw.github.com/Burtsev-Alexey/net-object-deep-copy/master/ObjectExtensions.cs

我是否需要为所有被引用的类提供扩展方法,我假设情况就是如此.

.net c# deep-copy

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

复制字典不会给我预期的结果

我必须复制一个字典,使用该副本并返回原始字典.

似乎发生的事情是,当我对复制的字典做一些工作时,修改了orignal字典.

这是我的代码:

dmodified_profile = new SortedDictionary<int,SortedDictionary<string,List<string>>>(d_profile);
Run Code Online (Sandbox Code Playgroud)

我不知道为什么如果我在dmodified_profile字典上进行修改,可以修改原始的d_profile?

谢谢

c# dictionary copy

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

对象通过引用传递而不是通过值传递

我在windows phone 8中写了一段代码(c#)(与windows 8有同样的问题).

我想知道,如何过去一个对象的价值,而不是他的参考.

让我解释一个例子:

public MyClass
{
    private Foo foo //my object.

    public void Init()
    {
        foo = new Foo();
        foo.age = 5; 
        ChangeFooValue(foo);
    }
    private void ChangeFooValue(Foo temp)
    {
        temp.age = 10; 
        //I want to change temp and NOT foo.
        //But at the end of this 
        //foo.age = 10;
        //and
        //temp.age = 10;
    }
}
Run Code Online (Sandbox Code Playgroud)

解决了: 我在课堂上创建了一个深层副本:

public Foo DeepCopy()
        {
            Foo other = (Foo) this.MemberwiseClone();
            return other;
        }
Run Code Online (Sandbox Code Playgroud)

ps:这可能是一个愚蠢的问题(如果是的话,请给我一些教程,以便能够通过我自己解决它).

c# windows-8 windows-phone-8

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

如何使用更改变量静态设置属性

这可能是一个简单的问题,我对OOP一般都是新手.

如果我有一个带有一个int数组属性的简单类(和构造函数)

public class MyClass
{
  public int[] MyProperty {get; set;}
  public MyClass(){}
}
Run Code Online (Sandbox Code Playgroud)

如果对象没有更改属性,如何将属性值设置为对象的值?

MyClass C1 = new MyClass();
MYClass C2 = new MyClass();
int[] x = new int[3] {1,2,3};
C1.MyProperty = x;
x[2] = 7;       //this changes C1.MyProperty to a value of {1,2,7}
C2.MyProperty = x;
Run Code Online (Sandbox Code Playgroud)

我希望C1的属性的2索引保持值3,即使我改变x [2]的值.类似地,我希望C2属性索引2值始终为7.是否有某种方式我可以将属性设置为ValueOf(x)?我需要某种静态关键字吗?

.net c# setter properties

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

将子类转换为父类

我有两个班级ProductExtendedProduct. ExtendedProduct派生自Product类。ExtendedProduct课堂上还有一些字段。

问题是,当我投射ExtendedProductProduct我的Product对象中有字段时ExtendedProduct

我只想转换ExtendedProductProduct班级,而班级中不ExtendedProduct出现任何班级字段Product

.net c# asp.net asp.net-mvc

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