无法使用对象访问声明的结构

时间:2015-04-29 12:44:27

标签: c# oop structure

我正在使用下面显示的结构

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无效标记'='。” 无法理解为什么我不能用相应的对象访问结构。请指导。

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 },那也是允许的。