インデクサーを備えた次の 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」をコンパイルしないようにする解決策がありますが、代わりにそれをサポートしたいと思います。
ありがとう