c# - “使用可能未分配的字段” - 取决于声明变量的位置?
问题描述
我正在使用公共方法构建一个公共类,该方法具有以下行:
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'.
为什么我会收到此错误?为什么在我的方法中本地声明变量时会出现错误,而当变量声明为我的类的成员时不会出现错误?
解决方案
推荐阅读
- python - 给定特定日期,使用 Python 在列表中查找下一个日期
- json - 尝试使用 codebuild buildspec 中的 shell 脚本登录 AWS 跨账户时出现 codebuild 错误
- pandas - 从函数的返回值创建数据框
- python - 在 Python 中通过嵌套的 Json/dict 解析
- php - 无法使用 Mssql Pconnect 连接
- python - binance.exceptions.BinanceAPIException: APIError(code=-1013): Filter failure: LOT_SIZE
- javascript - IE11:如何在 Internet Explorer 中的 React 中填充 `Array.values().next()`?
- numbers - 替换文件名中的 2 数字以在 python 中获得正确的格式
- datagrip - Datagrip - 单击左侧面板中的模式名称时不显示表名称
- android - 跨平台的 Firebase 有效负载 json 不起作用