簡體   English   中英

c#中給出警告的結構字段永遠不會分配給,並且始終具有默認值0

[英]Struct in c# giving warning Field is never assigned to,and will always have its default value0

我有非常簡單的結構如下:

 public struct ShFileInfo
 {
     public int hIcon;
     public int iIcon;
     public int dwAttributes;
 }

我已將警告設為錯誤 現在為所有三個int獲取錯誤

字段永遠不會分配給,並且始終具有默認值0

顯然,如果我嘗試將int初始化為0我將收到錯誤。 有沒有辦法處理這個沒有禁用警告為錯誤。

當我復制粘貼的作者代碼時,我一直收到警告。 收到警告

您可以像這樣為Struct定義構造函數

public struct ShFileInfo
    {
        public int hIcon;
        public int iIcon;
        public int dwAttributes;

        public ShFileInfo(int x,int y, int z)
        {
            hIcon = x;
            iIcon = y;
            dwAttributes = z;
        }
    }

您也可以使用只有一個參數的構造函數並初始化all

  public ShFileInfo(int x)
        {
            hIcon = x;
            iIcon = 0;
            dwAttributes = 0;
        }

如果你的結構在內部類中,那么你就會得到這個轉換

internal class WrapperClass
{
    public struct ShFileInfo
    {
        public int hIcon;
        public int iIcon;
        public int dwAttributes;
    }
}   

當您將內部訪問權限更改為public時,警告就會消失:

public class WrapperClass
{
    public struct ShFileInfo
    {
        public int hIcon;
        public int iIcon;
        public int dwAttributes;
    }
}

由於您僅將此結構用於P / Invoke,因此我只需在本地禁用警告:

#pragma warning disable 0649
public struct ShFileInfo
{
    public int hIcon;
    public int iIcon;
    public int dwAttributes;
}
#pragma warning restore 0649

編譯器無法知道您的結構是在非托管代碼中分配的,但是因為您知道,簡單地禁用警告幾乎沒有什么壞處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM