Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MemberwiseClone和GUID_C# - Fatal编程技术网

C# MemberwiseClone和GUID

C# MemberwiseClone和GUID,c#,C#,如果我这样做: var item2 = item1.MemberwiseClone(); item2.ID = Guid.NewGuid(); 无论新的Guiditem2获得什么,它都会将其更改为item1。这是不是不正确,因为Guid是一种值类型?这对于Guid和Guid?都会发生,您的实现一定有问题。下面是一个演示用法的示例: class Program { class A { public Guid ID { get; set; } p

如果我这样做:

var item2 = item1.MemberwiseClone();
item2.ID = Guid.NewGuid();

无论新的
Guid
item2
获得什么,它都会将其更改为
item1
。这是不是不正确,因为
Guid
是一种值类型?这对于
Guid
Guid?

都会发生,您的实现一定有问题。下面是一个演示用法的示例:

class Program
{
    class A 
    {
        public Guid ID { get; set; }

        public A Clone()
        {
            return (A)this.MemberwiseClone();
        }
    }

    static void Main(string[] args)
    {
        var item1 = new A();
        item1.ID = Guid.NewGuid();

        var item2 = item1.Clone();
        item2.ID = Guid.NewGuid();

        Console.WriteLine(item1.ID);
        Console.WriteLine(item2.ID);

        Console.ReadKey();
    }
}

如果将代码作为控制台应用程序运行,您将看到guid与文档中所述的不同。

您的实现一定有问题。下面是一个演示用法的示例:

class Program
{
    class A 
    {
        public Guid ID { get; set; }

        public A Clone()
        {
            return (A)this.MemberwiseClone();
        }
    }

    static void Main(string[] args)
    {
        var item1 = new A();
        item1.ID = Guid.NewGuid();

        var item2 = item1.Clone();
        item2.ID = Guid.NewGuid();

        Console.WriteLine(item1.ID);
        Console.WriteLine(item2.ID);

        Console.ReadKey();
    }
}

如果您将代码作为控制台应用程序运行,您将看到guid与文档中所述的不同。

是否
ID
只是一个自动属性?如果不是的话,它可能会做各种奇怪的事情。此外,此代码不应考虑
Guid
是引用或值类型。如果它是引用类型,您仍然会将引用更改为新对象(尽管您是对的,它是值类型)。该代码无法在MemberwiseClone受保护时工作。此外,我还使用了类似于下面Candide的代码对其进行了测试,但显然没有像您所说的那样发生。@Tonie您能为我们提供复制您的问题的示例工作代码吗?
ID
只是一个自动属性吗?如果不是的话,它可能会做各种奇怪的事情。此外,此代码不应考虑
Guid
是引用或值类型。如果它是引用类型,您仍然会将引用更改为新对象(尽管您是对的,它是值类型)。该代码无法在MemberwiseClone受保护时工作。此外,我还使用了类似于下面Candide的代码对其进行了测试,但显然没有像您所说的那样发生。@Tonie您能为我们提供复制您的问题的示例工作代码吗?嗯,我发现了,我有一个类类型的属性,它的ID是相同的。在我克隆之后,我只调用new并克隆它,一切都很好。我发现,我有一个类类型的属性,它的ID是相同的。在我克隆之后,我只需要调用new并克隆它,一切都很好。