C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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
}

大佬总结

以上是大佬教程为你收集整理的c# – 禁用警告导致另一个警告的Pragma(CS1692)全部内容,希望文章能够帮你解决c# – 禁用警告导致另一个警告的Pragma(CS1692)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: