c# – 禁用警告导致另一个警告的Pragma(CS1692)
我在我的一个C#类中有以下代码片段:
public override int GetHashCode() { // Thanks: https://stackoverflow.com/a/5910237 if (set == null) return 0; int h = 0x14345843; foreach (T elem in set) { h = unchecked(h + set.Comparer.GetHashCode(elem)); } return h; } 使用此代码,我将收到一条警告:“GetHashCode()’中引用的非只读字段”. 由于这是针对这种情况,我添加了以下编译指示来解除该警告:#pragma warning disable RECS0025. 但是,在添加该pragma之后,我仅在Unity编辑器中收到了一个新警告 – 而不是在Visual Studio中构建代码时:
双击它会直接指向#pragma警告禁用RECS0025行. 我在这做错了什么?目标是抑制RECS0025警告,当然不会引起另一个警告. 额外:我尝试在RECS0025 pragma周围禁用CS1692警告,但这也不起作用; CS1692错误继续发生. 额外的额外:我在其他地方的代码如下: #pragma warning disable RECS0108 static SharedPool<Tuple<HierarchyMember,string>,ReactiveProperty<T>> _sharedPool; #pragma warning restore RECS0108 这不会导致CS1692错误发生.也就是说,如果我从GetHashCode函数周围删除#pragma warning disable RECS0025,但保留上面的RECS0108编译指示,则不会出现CS1692警告. 不确定这如何与两个提供的答案相加. 解决方法
这是由于非数字前缀.我猜Unity是使用旧编译器还是不使用最新的C#规范?我根本不熟悉Unity编译器,但这应该解决它.
请注意这会禁用所有警告,因此我会尽可能地限制它的范围. public override int GetHashCode() { // Thanks: https://stackoverflow.com/a/5910237 #pragma warning disable if (set == null) return 0; int h = 0x14345843; foreach (T elem in set) { h = unchecked(h + set.Comparer.GetHashCode(elem)); } return h; #pragma warning restore } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |