簡體   English   中英

結構C#中的托管指針

[英]Managed Pointer in a Structure C#

我正在嘗試編寫一個應該能夠解析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}});
    }

我知道我應該將a的指針傳遞給Value(它的類型應該是不同於object的其他類型)

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

有沒有在結構中使用變量指針的托管方式?

(該功能可能是錯誤的或不正確的,這不是重點)

假設您希望XmlArg.Value 指向 a而不是僅克隆其值,那么答案就是“您不能”。 C#中沒有地址運算符,這是有充分理由的,因為您可以在堆棧上創建對變量的引用(就像您的a is一樣)。 當超出范圍時,該變量包含垃圾,然后包含ZONK。

請檢查以下內容: C#中的結構指針初始化

同樣,從Microsoft文檔中獲取有關struct的信息:結構還可以包含構造函數,常量,字段,方法,屬性,索引器,運算符,事件和嵌套類型,盡管如果需要多個此類成員,則應考慮將您的類型設為類。

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM