在C#中,内部结构给出了编译器警告

时间:2015-01-16 21:49:09

标签: c# struct visual-studio-2013 compiler-warnings internal

我有一个C#类库项目,需要在其中包含结构,但不应该暴露在它之外的任何东西。因此,我使用internal关键字创建了一个struct,如下所示:

internal struct MessageInfo {
     internal bool IsSticky;
     internal bool IsImportant;
     internal int MessageID;
     internal int AuthorID;
     internal int Sort;
     internal string Title;
     internal string Body;
     internal DateTime DisplayFromDate;
     internal DateTime DisplayToDate;
};

这编译并运行正常,但Visual Studio 2013(Ultimate,如果这很重要)会抛出编译器警告,例如:

warning CS0649: Field 'VNCM4.AjaxPages.MessageInfo.IsSticky' is never assigned to, and will always have its default value false

我发现如果我将'internal'关键字的所有实例更改为'public',警告就会消失。但是,我宁愿不这样做,因为为了抑制警告而必须公开它似乎很疯狂。

这是Visual Studio中的错误,还是我缺少的东西?我试过搜索这个确切的问题,但还没有找到任何内容。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:7)

如果结构是内部的,并且值永远不会分配给整个程序集中的任何位置,那么编译器知道该值从未使用过,并且可以显示您看到的警告。如果它是公共的,那么其他程序集引用这个程序集(当然编译器无法知道)可以写入该结构的字段,因此即使该程序集没有写入它,警告也不适用。

编译器只能提供帮助,并在structinternal时向您发出此警告。