我希望能够为列表对象分配值而不直接引用它们:
伪示例:
List<int> intList = new List<int> { 0 };
???? intPointer = ref intlist[0];
*intPointer = 1; // I know * isn't possible here, but it is what I'd like to do
Console.WriteLine(intList[0]);
它会输出1
.
我认为这是不可能的,但我只是想确保我没有遗漏任何东西。
另外,我并不是在寻找使用的示例unsafe
,我很好奇这在托管代码中是否可能。
C# 没有“ref locals”的概念(CLR 确实如此 http://blogs.msdn.com/b/ericlippert/archive/2011/06/23/ref-returns-and-ref-locals.aspx)。因此,您需要将这些值包装在可以改变的引用类型中。例如,
public class Ref<T> where T : struct
{
public T Value {get; set;}
}
List<Ref<int>> intRefList = new List<Ref<int>>();
var myIntRef = new Ref<int> { Value = 1 };
intRefList.Add(myIntRef);
Console.WriteLine(myIntRef.Value);//1
Console.WriteLine(intRefList[0].Value);//1
myIntRef.Value = 2;
Console.WriteLine(intRefList[0].Value);//2
编辑:添加了 C# 7.0参考当地人 https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/ref-returns但它们仍然不能以这种方式使用,因为你不能将 ref locals 放入数组或列表中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)