например, сделай тестовый xml и воспользуйся утилитой xsd.exe (в директории куда установил студию \SDK\%version%\Bin), она должна по xml нагенерить классы.
...Ei incumbit probatio, qui dicit, non qui negat...
RD>таких методов 4 варианта (для значений типа string,long, double и binary). А передо мной стоит задание RD>сделать это более удобным способом, например
RD>
RD>xml["window"]["border"]["width"] = 10;
RD>
RD>
RD>text = xml["window"]["border"]["width"];
RD>
Извините за спам и т.д. пишу как бы "джаст фор фан"
class Test
{
public class Foo
{
public void SetParameter(string path, int value)
{
Console.WriteLine("Set>{0} : {1}", path, value);
}
public int GetParameter(string path)
{
int resultValue = 1;
Console.WriteLine("Get>{0} : {1}", path, resultValue);
return resultValue;
}
}
public class Poo
{
public static Poo Create(Foo foo)
{
if (foo == null)
throw new ArgumentNullException("foo");
return new Poo(String.Empty, 0, foo);
}
private Poo(string prefix, int value, Foo foo)
{
_prefix = prefix;
_value = value;
_foo = foo;
}
public Poo this[string path]
{
get
{
if (_foo != null)
return new Poo(String.Format("{0}.{1}", _prefix, path), 0, _foo);
else
return null; // or throw exception :)
}
set
{
if (_foo != null)
{
if (value._foo == null)
{
_foo.SetParameter(String.Format("{0}.{1}", _prefix, path), value._value);
}
else
throw new Exception(); // can't set any non leaf object :)
}
else
throw new Exception();
}
}
public static implicit operator Poo(int value)
{
return new Poo(String.Empty, value, null);
}
public static implicit operator int(Poo poo)
{
if (poo._foo != null)
return poo._foo.GetParameter(poo._prefix);
else
throw new InvalidCastException();
}
string _prefix;
Foo _foo;
int _value;
}
static void Main(string[] args)
{
Foo foo = new Foo();
Poo poo = Poo.Create(foo);
poo["A"]["B"] = 2;
int z = poo["Z"]["X"]["xxx"];
Console.ReadKey();
}
}
В точности соответствует тому что ты хотел получить