Проблема, связанная с тем, как сделать мой SetContainer
более общим, чтобы содержать любой тип, который расширяет CompoundValue
. Это то, что я пробовал MapContainer<string, SetContainer<CompoundValue>>
. Но im получает сообщение об ошибке state["a"] = new SetContainer<A>
, говоря, что тип A не может быть явно преобразован в CompoundValue.Построение общих типов данных в C#
Я включил соответствующий пример, показывающий проблему ниже.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Microsoft.Modeling; // SetContainer and MapContainer
namespace SGSN
{
class ControlState
{
MapContainer<string, SetContainer<CompoundValue>> state;
ControlState()
{
state = new MapContainer<string, SetContainer<CompoundValue>>();
state["a"] = new SetContainer<A>(); //ERROR
state["b"] = new SetContainer<B>(); //ERROR
state["c"] = new SetContainer<C>(); //ERROR
state["d"] = new SetContainer<D>(); //ERROR
}
}
class A: CompoundValue
{
internal string a1;
internal string a2;
internal string a3;
internal string a4;
internal string a5;
internal string a6;
internal A(string a1, string a2, string a3,
string a4, string a5, string a6)
{
this.a1= a1;
this.a2= a2;
this.a3= a3;
this.a4= a4;
this.a5= a5;
this.a6= a6;
}
}
class B: CompoundValue
{
internal string b1;
internal string b2;
internal string b3;
internal B(string b1, string b2, string b3)
{
this.b1= b1;
this.b2= b2;
this.b3= b3;
}
}
class C: CompoundValue
{
internal string c1;
internal string c2;
internal string c3;
internal string c4;
internal string c5;
internal string c6;
internal string c7;
internal string c8;
internal C(string c1, string c2, string c3,
string c4, string c5, string c6, string c7, string c8)
{
this.c1 = c1;
this.c2= c2;
this.c3= c3;
this.c4= c4;
this.c5 = c5;
this.c6= c6;
this.c7= c7;
this.c8= c8;
}
}
class D: CompoundValue
{
internal string d1;
internal string d2;
internal string d3;
internal D(string d1, string d2, string d3)
{
this.d1= d1;
this.d2= d2;
this.d3= d3;
}
}
}
1) Как объявляется тип SetContainer <>? 2) Правильный синтаксис: 'state [" a "] = новый SetContainer (); '(вы пропустили фигурные скобки) –
Да, я сделал, но это не имеет значения. Я обновил свой запрос. – user3139545