需要将一个C里面的程序写成C#的,C下面定义了一个list,如下:
typedef struct lists
{
   int index;
   struct lists *parent;
   struct lists *parent;}list这段程序在C#下怎么写啊?我直接写成:
public struct lists
{
  int index;
  lists paraent;
  lists child;
}编译时报错:cause a cycle in the struct layout.

解决方案 »

  1.   

    是啊,那怎么把上面的C程序转化成C#的啊?或者在C#里怎么定义类似的list?
      

  2.   

    象你这种情况在C#里应该用类而不是结构。
    public class List
    {
      private int _index;
      private List _parent, _child;  public List()
      {
      }  public int Index
      {
         get { return _index; }
      }  public List Parent
      {
         get { return _parent; }
         set
         {
           _parent = value;
           UpdateIndexes(this);
         }
      }  public List Child
      {
         get { return _child; }
         set
         {
            _child = value;
            UpdateIndexes(this);
          }
      }  private static void UpdateIndexes(List obj)
      {
         // TODO: 更新列表中所有元素的索引值。
         throw new NotImplementedException();
      }
    }
    另外,.net 2.0开始已经提供了LinkedList<T>泛型类,如果懒得自己实现的话可以试试使用这个现成的,使用方法参考MSDN:http://msdn.microsoft.com/en-us/library/he2s3bh7.aspx
      

  3.   

    觉得你可以用泛型List<>只需要添加引用using System.Collections.Generic即可
      

  4.   

    public class lists
    {
      int index{get;set;}
      A paraent{get;set}
      A child{get;set}
    }
    public class A{}
      

  5.   

    typedef struct lists
    {
      int index;
      struct lists *parent;
      struct lists *parent;}list
    晕,糊涂了,这好像就是一个双向链表啊,一个index是节点的保存内容,俩个parent各自指向它前面和后面的节点?如果是这样,那应该可以就用LIST,不用再保存那俩个指针了,如:struct Item
    {
        int index;
        //in case you have some other field here
    }List<Item> myList;
      

  6.   


    晕,错了错了,有一个是child
      

  7.   

    我也晕了,楼主为什么在C里面为什么不直接定义个int数组得了?
      

  8.   


    请问在另一个类中需要对list.Index赋值为-1怎么操作呢?
      

  9.   

    唉,别人的一个经典算法,用C写的,我不会用C,想把它转换到C#里
      

  10.   


    让Index属性只读是为了保护它不被随意更改,如果觉得没有这种必要,那么可以为它加上set方法。另外,如果-1是一种特殊状态,可以用另一种方法或属性来操作。
      

  11.   


    对呀,你该了后:
    public struct lists
    {
      int index;
      lists paraent;
      lists child;
    }这就是个双向链表啊,而且,里面就保存了个index,其他啥数都没有啊。如果你没有简化,那这应该就和C#的:List<int>没什么区别啊。我什么地方看错了?