首页 > 解决方案 > “使用可能未分配的字段” - 取决于声明变量的位置?

问题描述

我正在使用公共方法构建一个公共类,该方法具有以下行:

deviceInfo.Attributes.Size = Marshal.SizeOf(deviceInfo.Attributes);

deviceInfo 是一个基于以下结构的变量:

public struct DeviceInfo
{
    public string DevicePathName;       // Path of the device
    public SafeFileHandle HidHandle;    // Handle used for communicating via hid.dll
    public HiddAttributes Attributes;   // HID Attributes
    public HidpCaps Capabilities;       // HID Capabilities
}

HiddAttributes 定义为:

[StructLayout(LayoutKind.Sequential)]
public struct HiddAttributes
{
    public Int32 Size; // = sizeof (struct _HIDD_ATTRIBUTES) = 10
    public UInt16 VendorID;
    public UInt16 ProductID;
    public UInt16 VersionNumber;
}

如果我将变量“deviceInfo”声明为我的类的成员,那么一切都可以编译:

private DeviceInfo deviceInfo;

但是,如果我将变量“deviceInfo”声明为我的方法的局部变量,则对“Marshal.SizeOf(deviceInfo.Attributes)”的调用中的“deviceInfo.Attributes”带有红色下划线,并显示错误:

CS0170: Use of possibly unassigned field 'Attributes'.

为什么我会收到此错误?为什么在我的方法中本地声明变量时会出现错误,而当变量声明为我的类的成员时不会出现错误?

标签: c#

解决方案


推荐阅读