public void WriteXml(string strName,string strValue)
{
 string[,] strNode = new string[,]{{"name","tradeItem" ,"tradeInfomation" ,"tradeing"} , {"subName","tradeItemDescriptionInformation" ,"tradeItemUnitDescriptor" ,"unit"} ,{"pubDate","tradeItemIdentification" ,"childTradeItem" ,"tradeItemIdentification"}};
 for(int i=0 ;i < strNode.GetLength(0);i++)
  {
   if(strNode[i,0].ToString() == strName)
     {
tid.strNode[i,1].ToString().strNode[i,2].ToString().strNode[i,3].ToString() = strValue;
     }
  }
}
如上面strNode是这样的关系,strNode[i,0]是字段名称,strNode[i,1]是对应的第一级类名,strNode[i,2]是对应第二级类名,strNode[i,3],是第二级类下面的属性名。
tid是名称空间.
我想问的是:在C#中采用什么技术,可以将方法写成:tid.变量类名.变量类名.变量属性名 = 具体的值.
而不用写一个属性就得写一个方法.

解决方案 »

  1.   

    to 在C#中采用什么技术,可以将方法写成:tid.变量类名.变量类名.变量属性名 = 具体的值.
    而不用写一个属性就得写一个方法.应该是不行的,毕竟“.”不能用作声明变量或属性
      

  2.   

    你可以以string作为参数倒是可以。
      

  3.   

    toKnight94(愚翁) 可以给个简短的代码吗?
    你的意思是:
    tid.strName1.strName2.strName3 = strValue;这样吗?
    strName1-3都是参数。
      

  4.   

    Sample code as follows:
    public class ListTest
    {
    private string[,,] strData;
    public ListTest( int nFirst, int nSecond, int nThird )
    {
    strData = new string[nFirst, nSecond, nThird];
    } public string this[string Name]
    {
    get

    if( Name == null ) return null;
    string[] strItems = Name.Split( '.' );
    if( strItems == null || strItems.Length != 3 ) return null;

    int i = -1, j = -1, k = -1;
    try
    {
    i = Convert.ToInt32( strItems[0], 10 );
    j = Convert.ToInt32( strItems[1], 10 );
    k = Convert.ToInt32( strItems[2], 10 );
    return strData[i,j,k];
    }
    catch{
    return null;
    } }
    set 
    {
    if( Name == null ) throw new Exception( "Invalid index name!" );
    string[] strItems = Name.Split( '.' );
    if( strItems == null || strItems.Length != 3 ) 
    throw new Exception( "Invalid index name!" );

    int i = -1, j = -1, k = -1;
    try
    {
    i = Convert.ToInt32( strItems[0], 10 );
    j = Convert.ToInt32( strItems[1], 10 );
    k = Convert.ToInt32( strItems[2], 10 );
    strData[i,j,k] = value;
    }
    catch
    {
    throw new Exception( "Invalid index name!" );
    } }
    }
    }------Calling--------
    ListTest myTest = new ListTest( 2,2,2 );
    myTest["1.1.1"] = "Test";
    MessageBox.Show( myTest["1.1.1"] );
      

  5.   

    其实这个方法我打算用在写xml节点上,这个xml结构总共是存在200多个节点。
    一般的做法是写一个节点的结构,也就需要一个方法,而这样我就得写200多个方法。
    现在比如说:
    tid.tradeItem.tradeItemIdentification.additionalTradeItemIdentification = "100036";
    就会生成这样的结构:
    <tradeItem>
       <tradeItemIdentification>
          <gtin>100036</gtin>
       </tradeItemIdentification>
    </tradeItem>
    而这个语句:
    tid.tradeItem.tradeItemInformation.classificationCategoryCode.classificationCategoryCode = strCode;
    生成这样的结构:
    <tradeItem>
    <tradeItemInformation>
     <classificationCategoryCode>
      <classificationCategoryCode>中国北京</classificationCategoryCode> 
      </classificationCategoryCode>
    </tradeItemInformation>
    </tradeItem>
    上面所涉及的tradeItem、tradeItemInformation等是已经设计好的类库。
    我现在就是直接调用这些类来写xml文件结构。
    而我想要的这个语句:tid.strNode[i,1].ToString().strNode[i,2].ToString().strNode[i,3].ToString() = strValue;
    也是为了执行上面那样类似的语句。
    还请你多多执教!
      

  6.   

    就你的功能来说,比较好的方法是在tradeItem、tradeItemInformation等类中提供ReadXml或者WriteXml方法,用来形成xml结构,这也是最直接的。
      

  7.   

    这个xml得结构也不是固定的,所以不能写成死的。
    要是象我的想的这个方法,应该怎么实现啊!
      

  8.   

    to 但是你得调用这个基类,来实现这个过程吧。属性赋值是属性赋值,形成xml结构是形成xml结构,你要把它分成两步来做。
      

  9.   

    只能分开来做。
    因为xml结构不固定的。
      

  10.   

    toshuo_shu(取个名字还真难)
    就是怕用反射啊,因为担心性能的问题啊
    写200多个属性,执行200次这个方法,怕啊!
    所以想寻找其他的途径。
      

  11.   

    如果你仍然无法准确的描述你的需求,建议你去研究.NET Framework里面的配置文件管理架构。
      

  12.   

    我觉得还是采用XML文件的办法吧
      

  13.   

    zhgroup() 说的csharpdevelope是个开源项目,addin是它的插件描述文件
      

  14.   

    如果在想在程序运行时动态的创建类并且执行相应的方法,那道先涉及到的就是参数的问题.并且一定要用反射去实现。csharpdevelope的addin文件中的一些类是自动初始化的。如果你动态创建的类不需要参数且欲执行的方法也不需要参数的话,可以用配置文件做。
      

  15.   

    感谢大家的帮忙!
    to zhgroup() 
    我同意你的动态创建类的实例,要用反射的观点
    同时对你的那个配置文件的方法很感兴趣,
    能不能说的在具体一点了!