【发布时间】:2019-12-23 18:25:17
【问题描述】:
主要目的是使子程序更加统一,并且可以在SET赋值中根据Variable的值来选择struct的字段。 如果我用fixed() 替换注释行上的当前fixed(),我会收到error CS0212。
为什么它不能工作 - 这是“C#4.0 的当前限制”还是原则上不能工作?
enum ConnectSide {Left,Right}
unsafe private void ConnectSubtreeToNewNode(int iNumNodeHeadSubtree, int iNumNewNode, ConnectSide Side)
{
//fixed (int* prtNode = (Side == ConnectSide.Left) ? &Tree[iNumNewNode].iLeftElement : &Tree[iNumNewNode].iRightElement )
fixed (int* prtNode = &Tree[iNumNewNode].iLeftElement)
{
if (iNumNodeHeadSubtree != iNodeOFF)
{
*prtNode = iNumNodeHeadSubtree;
Tree[iNumNodeHeadSubtree].iParentElement = iNumNewNode;
}
else
*prtNode = iNodeOFF;
}
}
另外
private Node[] Tree;
//Main struct for BST
public struct Node
{
public int Key;
public int iLeftElement;
public int iRightElement;
public int iParentElement;
public int iHeight;
public int iBalance;
}
【问题讨论】:
-
Tree的定义是什么? -
C# 语言规范对在
fixed()的初始化程序中使用&有特殊规则。见这里:docs.microsoft.com/en-us/dotnet/csharp/language-reference/… -
您可能想说CS0212是什么错误?所有的 C# 错误代码我都没有记住
-
@Flydog57 CS0212 - 您只能在固定语句初始化程序中获取未固定表达式的地址
-
@Dai Look Additional
标签: c# conditional-statements operator-keyword fixed ternary