我正在使用下面显示的结构
public struct TPCANMsg
{
/// <summary>
/// 11/29-bit message identifier
/// </summary>
public uint ID;
/// <summary>
/// Type of the message
/// </summary>
[MarshalAs(UnmanagedType.U1)]
public TPCANMessageType MSGTYPE;
/// <summary>
/// Data Length Code of the message (0..8)
/// </summary>
public byte LEN;
/// <summary>
/// Data of the message (DATA[0]..DATA[7])
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] DATA;
}
然后在下面
中声明了结构对象using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Peak.Can.Basic;
namespace rcToOnBoardPC
{
class Communication
{
// CAN Status Decalaration
TPCANStatus gStatus;
// List of CAN Messages
TPCANMsg msg1 = new TPCANMsg();
msg1.ID = 0x100;
}
}
我在类,结构或接口成员声明中得到以下错误“错误1无效标记'='。” 无法理解为什么我不能用相应的对象访问结构。请指导。
答案 0 :(得分:0)
由于这个问题涉及一个简单的印刷错误,它可能应该被关闭,最终可能会被关闭。
与此同时,这是评论者试图告诉你的内容......
基本问题是你在方法之外编写了一个程序语句。在C#(实际上,任何类似的语言)中,这是不允许的。程序语句必须包含在方法(也称为“函数”)中。
您可以通过以下两种方式之一解决问题。最容易理解的是将语句放在一个方法中(即直接遵守您正在运行的语言规则):
class Communication
{
// CAN Status Decalaration
TPCANStatus gStatus;
// List of CAN Messages
TPCANMsg msg1 = new TPCANMsg();
public Communication()
{
msg1.ID = 0x100;
}
}
解决问题的第二种方法依赖于以下事实:虽然程序语句不能存在于方法之外,但您可以在各种上下文中使用表达式 ,包括初始化程序。 C#有一个初始化语法,允许您将赋值语句作为初始化的一部分包含在内。即从技术上讲,你只是编写一个初始化表达式,但是在那个上下文中你可以编写一小段代码,只要它包含的唯一类型的程序语句是赋值,即使它在方法之外也是合法的
这种方法看起来像这样:
class Communication
{
// CAN Status Decalaration
TPCANStatus gStatus;
// List of CAN Messages
TPCANMsg msg1 = new TPCANMsg { ID = 0x100 };
}
请注意,在使用该语法时,还可以从无参数构造函数的调用中省略parens ()
。这不是必需的;如果你更喜欢写new TPCANMsg() { ID = 0x100 }
,那也是允许的。