我有以下带有索引器的 C# 泛型类:
public class MySpecializedContainer<T> where T : new()
{
private InternalContainer<Element> container;
public T this[int index]
{
set
{
ConvertTToElement( value, container[index] );
}
get
{
T obj = new T();
Element elem = container[index];
ConvertElementToT( elem, obj );
return obj;
}
}
}
正如你所看到的,我的班级假装 Element 的内部容器是 T 的容器,只要我可以将 Element 转换为 T 就可以工作,反之亦然。
我遇到的问题如下:
以下将按预期工作,因为它将有效地更改内部容器中的实际元素:
public class MyClass {
public int a ;
}
MySpecializedContainer<MyClass> container = ...;
MyClass temp = container[18];
temp.a = 5;
container[18] = temp;
但这个更简单的版本不会:
container[18].a = 5;
这只会更改 get 访问器在索引器中创建的副本...
有什么办法可以使这项工作?
否则我有一个解决方案,至少可以使这个语句“container[18].a=5”不编译,但我真的很想支持它。
谢谢