结构C#中的托管指针

时间:2014-01-28 14:35:29

标签: c# pointers structure managed

我正在尝试编写一个能够解析xml文件的通用函数

这是代码

    public struct XmlArg
    {
        public string Name;
        public Type T;
        public object Value;
    };

    static bool ParseXmlArgs(XmlReader xml, params XmlArg[] args)
    {
        for (int i = 0; i < args.Length; ++i)
        {
            if (xml.MoveToContent() != XmlNodeType.Element || xml.Name != args[i].Name)
            {
                return false;
            }
            args[i].Value = xml.ReadElementContentAs(args[i].T, null);
        }
        return true;
    }

    static void Main(string[] args)
    {
        int a = 0;

        ParseXmlArgs(
            XmlTextReader.Create("C:\\Users\\Yazilim\\Desktop\\XML.xml"),
            new XmlArg[]{
                new XmlArg() { Name = "ErrorCode", T = typeof(int), Value = a}});
    }

我知道我应该传递一个指向Value的指针(它的类型应该是除了对象之外的其他类型)

但我不希望它是非托管方式。

有没有管理方法在结构中使用变量的指针?

(该功能可能错误或不正确,而且不是重点)

2 个答案:

答案 0 :(得分:0)

假设您希望XmlArg.Value指向指向a而不是仅仅克隆其值,那么答案就是“你不能”。 C#中没有address-of运算符,这是有充分理由的,因为你可以在堆栈上创建对变量的引用(就像你的a一样)。当你用完范围时,该变量包含垃圾,然后是ZONK。

答案 1 :(得分:0)

检查一下:Struct Pointer Initialization in C#

另外,从关于结构的Microsoft文档中:结构也可以包含构造函数,常量,字段,方法,属性,索引器,运算符,事件和嵌套类型,但是如果需要多个这样的成员,则应考虑使用类型而是一个班级。

希望有所帮助!