4

Resharper が未使用の変数があることを示すコードがありますが、変数は間違いなく使用されています。変数は Databind() で使用され、バインドするフィールドは文字列として指定されます。フィールド名は文字列変数を使用してアクセスされるため、Resharper はそれらが使用されているとは考えません。

次のコード サンプルでは、​​Resharper から public 変数を private に変更するように指示されています。それを行った後、変数は使用されておらず、削除できることがわかります。変数が使用され、公開されている必要があるため、これらの提案はどちらも間違っています。

Resharper がこれについて私に警告し、黄色で表示されるのが気に入りません。コードグリーンをチェックインしたいと思います。コメントで抑制するオプションを使用してこれを無視できることはわかっていますが、過去にこのオプションを使用する必要はなく、コードをグリーンにする他の解決策を見つけることができました。この場合、別の方法を見つけることができませんでした。この変数が使用されていることを Resharper に認識させる方法を知っている人はいますか?

using System;
using System.Collections;
using System.Web.UI.WebControls;

public partial class TestCode_General_ResharperTest : System.Web.UI.Page
{
    private class TestClass
    {
        public TestClass(string name, string id)
        {
            ID = id;
            Name = name;
        }

        public string ID;  /*Resharper says this can be made private*/
        public string Name; /*Resharper says this can be made private*/
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            DropDownList testList = new DropDownList();
            ArrayList groups = getTestList();
            testList.DataSource = groups;
            testList.DataValueField = "ID";
            testList.DataTextField = "Name";
            testList.DataBind();    /* Databind causes the public variables to be accessed.*/
        }
    }

    private static ArrayList getTestList()
    {
        ArrayList groupInfo = new ArrayList();
        string[] pairs = new[] { "Test:1", "Test 2:2", "Test 3:3" };
        foreach (string pair in pairs)
        {
            string[] values = pair.Split(new[] { ':' });
            groupInfo.Add(new TestClass(values[0], values[1]));
        }
        return groupInfo;
    }
}
4

6 に答える 6

5

次の 3 つのオプションがあると思います。

  1. とにかくここでは強い型付けを使用していないため、匿名クラスを使用してください。
  2. コメントで警告を抑制し、理由を説明するコメントを追加します。
  3. ReSharper の[UsedImplicitly]属性を追加し、理由を説明するコメントを追加します (ただし、これがフィールドで機能するかどうかはわかりません)。

オプション 1 の例:

using System;
using System.Collections;
using System.Web.UI.WebControls;

public partial class TestCode_General_ResharperTest : System.Web.UI.Page
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        if (Page.IsPostBack)
            return;

        var testList = new DropDownList();
        testList.DataSource = GetTestListData();
        testList.DataValueField = "ID";
        testList.DataTextField = "Name";
        testList.DataBind();    /* Databind causes the public variables to be accessed.*/
    }

    private static IEnumerable<object> GetTestListData()
    {
        var groups = new List<object>();
        var pairs = new[] { "Test:1", "Test 2:2", "Test 3:3" };
        foreach (var pair in pairs)
        {
            var values = pair.Split(new[] { ':' });
            groups.Add(new { ID = values[0], Name = values[1] });
        }
        return groups;
    }
}
于 2013-04-24T01:02:53.457 に答える
1

Resharper は、DropDownList の DataBind メソッドがそれらのフィールド/プロパティにアクセスする必要があることを認識できません。警告を削除したい場合は、それらをプロパティにしてから、他の人が言及したように TestClass を作成するか、コメントでそれらを抑制することができます。

私は仕事でこの日を毎日見ています。開発者は、Resharper を満足させることに必死であり、Resharper がレビュー可能な提案を行うために存在し、コードが理にかなっている場合は無視することを選択する必要があるときに、小さな波線や警告に OCD を取得します。

于 2013-04-23T23:46:44.533 に答える
0

以下に示すようにそれらをプロパティにします

private class TestClass
    {
        public TestClass()
        {

        }

        public string ID{get;set;}
        public string Name{get;set;}
    }

そしてそれを次のように使用します

 groupInfo.Add(new TestClass{ID=values[0], Name= values[1]});
于 2013-04-23T23:20:41.993 に答える
0

それらをプロパティにしてみてください

private class TestClass
{
    public TestClass(string name, string id)
    {
        ID = id;
        Name = name;
    }

    public string ID { get; set; }
    public string Name { get; set; }
}
于 2013-04-23T23:22:05.417 に答える
0

ReSharper は、一部のフィールドがリフレクションのみで使用されていることを認識できません。

public フィールドではなくプロパティにすることを検討してください。

于 2013-04-23T23:22:42.017 に答える