sonarqube c#set accessor error:使用'值'此属性中的参数设置访问器声明

时间:2017-11-01 13:06:32

标签: c# sonarqube

string _frontImgPath = string.Empty;

public string FrontImagePath
{
    get
    {
        return _frontImgPath;
    }

    set
    {
        if (!String.IsNullOrEmpty(OriginalImgPath) && !String.IsNullOrEmpty(HostUrl))
            _frontImgPath = HostUrl + OriginalImgPath;
    }
}

我们有C#属性" OriginalImgPath"和#34; HostUrl"在同一个班。我在sonarqube中收到以下警告"使用'值'此属性中的参数设置访问者声明"。

我们为什么要使用' value'这里吗?

3 个答案:

答案 0 :(得分:1)

因为如果有人打电话: FrontImagePath = "lalala" 传递给set方法的值根本不会被使用。

如果是这种情况,我认为用正确的名称编写独立的方法会更好。

答案 1 :(得分:1)

当你在属性中调用set时,实际上是在调用set_FrontImagePath(string value)方法,它有参数 - string value。在您的情况下,您尝试在没有任何参数的情况下调用该方法,这会导致Use the 'value' parameter in this property set accessor declaration"错误。

您可以在使用部分执行以下操作:

string _frontImgPath = string.Empty;

public string FrontImagePath
{
    get{
        return _frontImgPath;
    }
    set{
        _frontImgPath = value;
    }
}

void SomeMethod()
{
    . . .
    OriginalImgPath = "x:\\someimage.img";
    . . .
    HostUrl = "yourHostUrl";
    . . .
    if (!String.IsNullOrEmpty(OriginalImgPath) && !String.IsNullOrEmpty(HostUrl))
        FrontImagePath =  HostUrl + OriginalImgPath;
    . . .
}

答案 2 :(得分:0)

set访问器类似于返回类型为void的方法。它使用名为value的隐式参数,其类型是属性的类型。在以下示例中,set属性中添加了Name访问者:

class Person
{
    private string name;  // the name field

    public string Name    // the Name property
    {
        get { return name; }

        set { name = value; }
    }
}

为属性赋值时,将使用提供新值的参数调用set访问器。例如:

Person person = new Person();
person.Name = "Joe";  // the set accessor is invoked here                

System.Console.Write(person.Name);  // the get accessor is invoked here

对于set访问器中的局部变量声明,使用隐式参数名称value是错误的。

或者 get访问器可用于返回字段值或计算它并返回它。例如:

class Employee
{
    private string name;
    public string Name
    {
        get
        {
            return name != null ? name : "NA";
        }
    }
}