【问题标题】:In C#, internal structs give compiler warnings在 C# 中,内部结构会给出编译器警告
【发布时间】:2015-01-16 21:49:08
【问题描述】:

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

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(如果重要的话,终极版)会引发编译器警告,例如:

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

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

这是 Visual Studio 中的错误,还是我遗漏了什么?我已经尝试搜索这个确切的问题,但尚未找到任何内容。

提前感谢您的帮助!

【问题讨论】:

  • 您是否曾经在项目中的任何位置分配过这些字段?
  • 该类型与struct 无关。不仅可变结构是邪恶的,而且这种类型很明显不代表一个单一的逻辑值。毫无疑问应该是class。
  • 除了@Servy 的评论之外,还有设计指南指出struct should has an instance size under 16 bytes

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


【解决方案1】:

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

只有当struct 是internal 时,编译器才能提供帮助并给你这个警告。

【讨论】:

  • 这很有趣,我在图书馆中使用它。我可能应该把它放在原来的问题中。对于那个很抱歉。 ://
  • @TravisVroman 您正在为该字段分配值? (而不是,比如说,该类型中的其他字段之一?)如果你是,那么显然警告是错误的。我相当怀疑这种情况正在发生。
  • 呃,就是这样。我只是仔细检查了一下,其中一个没有显示警告,因为它被分配给了。显然我应该走开一点。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多