我正在使用FileHelpers nuget来读取文件。它作为例外工作,但当我尝试在Visual Studio中调试时,它会向我发出警告。
如何摆脱warning CS0649: Field 'Orders.Freight' is never assigned to, and will always have its default value null
?
class Orders : INotifyRead
{
[FieldFixedLength(10)]
public string Freight;
public void BeforeRead(BeforeReadEventArgs e)
{
if (e.RecordLine.StartsWith("Machine"))
// ||
// e.RecordLine.StartsWith("-"))
e.SkipThisRecord = true;
}
public void AfterRead(AfterReadEventArgs e)
{
// we want to drop all records with no freight
if (Freight == "_raw")
e.SkipThisRecord = true;
}
}
答案 0 :(得分:3)
不,不要将默认值明确指定给Freight
。
警告是合法的,因为您从未真正为该字段分配值。
您没有指定值,因为该字段会被魔法填充。 (顺便说一句,这就是我不喜欢魔法的原因;但这完全是另一回事。)
因此,最好的方法是承认警告是合法的但是要考虑的事实,并明确地压制它。
那么,看一下#pragma warn
指令的文档:
https://msdn.microsoft.com/en-us/library/441722ys.aspx
答案 1 :(得分:1)
为了完整起见,我只是想结合一下['回答和迈克的回答 - 没有任何原创,只是试图帮助下一个穿过这个页面的人。
Per blins:你可以设置值等于null并且第一个警告"字段XYZ被分配给但从未使用"
public string Freight = null; //or = "", or = default(string) (which is null)
Per Mike," magic"他所说的是反思。变量在运行时分配给。这是编译器无法检测到的。更多关于Mike关于抑制此处警告的答案:Suppressing "is never used" and "is never assigned to" warnings in C#
要禁止显示#34;永远不会使用字段XYZ",请执行以下操作:
#pragma warning disable 0169
... field declaration
#pragma warning restore 0169
禁止显示"字段XYZ永远不会分配给,并且始终具有默认值XX",您可以这样做:
#pragma warning disable 0649
... field declaration
#pragma warning restore 0649
答案 2 :(得分:0)
你基本上有两种选择,哪种方式真正取决于意图(建议一种或另一种是主观的)。首先,如果Orders
类型的设计要求规定它应该具有空的默认值,则可以消除警告。
public string Freight = null;
以上只是澄清了意图,因此消除了警告。
另一种方法是抑制警告,如其他答案所述。在您的情况下,如果假设该值应该通过Reflection设置,那么这种替代方案在这种情况下似乎是不合适的。