是否可以重新分配本地的参考?

时间:2017-09-04 11:34:13

标签: c# .net pointers

C#的ref locals是使用一个名为托管指针的CLR功能实现的,它具有自己的一组限制,但幸运的是,不可变的不是其中之一。即在ILAsm中,如果你有一个托管指针类型的局部变量,那么完全有可能改变这个指针,使其“引用”另一个位置。 (C ++ / CLI还将此功能公开为interior pointers。)

在ref本地读取C#documentation,在我看来C#的ref本地是,即使基于CLR的托管指针,也不可重定位;如果它们被初始化为指向某个变量,则不能使它们指向别的东西。我尝试过使用

{
   "Id": "L2VtcGxveWVlcy9lbXBsb3llZS10ZXN0LmNzdg==",
  "Name": "employee-test.csv",
  "DisplayName": "employee-test.csv",
  "Path": "/employees/employee-test.csv",
  "LastModified": "2017-09-04T10:13:21Z",
  "Size": 507,
  "MediaType": "text/csv",
  "IsFolder": false,
  "ETag": "\"0x8D4F37D9209EC29\"",
  "FileLocator": "L2VtcGxveWVlcy9lbXBsb3llZS10ZXN0LmNzdg==",
 "LastModifiedBy": null
}

和类似的结构,无济于事。

我甚至试图在IL中编写一个包含托管指针的小结构,就C#而言它是有效的,但是CLR似乎不喜欢在结构中有一个托管指针,即使在我的用法它永远不会进入堆。

是否真的不得不求助于使用IL或者递归来解决这个问题? (我正在实现一个数据结构,需要跟踪其遵循的指针,完全使用托管指针。)

0 个答案:

没有答案