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并克隆它,一切都很好。