gpt4 book ai didi

C# 在实例化后更改通用对象?

转载 作者:行者123 更新时间:2023-11-30 20:06:37 24 4
gpt4 key购买 nike

是否可以在实例化 SomeClass 后将 TEntity 更改为 NewEntity?

例如,拿这个类定义:

public class SomeClass<TEntity> where TEntity : class
{
public void ChangeSet<NewEntity>()
{
TEntity = NewEntity;//not valid
}
}

例如像这样实例化:

var sc = new SomeClass<SomeEntity>();

我怎样才能做到这一点?

sc.ChangeSet<NewEntity>();

最佳答案

Is it possible to change TEntity to NewEntity after SomeClass has been instantiated?

,这是不可能的。 CLR 如何知道如何将值从 TEntity 映射到 SomeEntity?它们是不同的类型。这就像要求您的杂货商将苹果变成橙子一样。

下面的代码不推荐。您需要担心的问题太多了,而且很容易出现错误。我提供它作为您要求 CLR 执行的操作的示例。

SomeClass<Foo> fooClass = new SomeClass<Foo>():
//do stuff to fooClass
SomeClass<Baz> = fooClass.ChangeSet<Baz>();

public class SomeClass<T> where T : class
{
public SomeClass<K> ChangeSet<K>() where K:class
{
var changed = new SomeClass<K>();
//manually map the properties over
//but how do you know that Foo.PropertyA fits into Baz.PropetyZed?
//what happens if Foo.A has a string length of 100, but Baz.A has a max length of 50? What do you do?
//What id Foo.ID is an INT and Baz.ID is a GUID?
return changed;
}
}

关于C# 在实例化后更改通用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9590837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com