如何设置变量的属性

时间:2013-12-30 12:36:56

标签: c#

这是我的功能,它将所有项目放在数据库中。

 public bool getUserProjects(ref List<erpAssets>userProjects)
        {

            string arguments = "{\"sessionId\":\"" + m_LoggedInUser.sessionId + "\"," +
                                 "\"assetType\":\"" + PROJECT_ASSET_TYPE_NAME + "\"" +
                                "}";
            string response = UrlParser(METHOD_GET_ASSETS, MODULE_ADMINISTRATION, arguments); //calling the function urlParse to get the response from that page

            erpAPIResponse basicResponse = JsonConvert.DeserializeObject<erpAPIResponse>(response);

            if (basicResponse.success.Equals("yes"))
            {
                try
                {

                    erpAssets[] Projects = JsonConvert.DeserializeObject<erpAssets[]>(basicResponse.arguments);
                    userProjects.AddRange(Projects);

                }
                catch (Exception e)
                { 

                }

            }
            else return false;

            return true; // sending the response back to client            
        }

我的erpAsset类如下:

 class erpAssets
    {
        public string assetId { get; set; }
        public string assetSerialNo { get; set; }
        public string serialNo { get; set; }

        public string assetDescription { get; set; }
        public string assetType { get; set; }
        public string parentId { get; set; }
        public string assetIsTrakable { get; set; }

        public bool isTrackable { get; set; }
        public bool isMovable { get; set; }


        public string assetInheritsRegion { get; set; }

        public string inheritsRegion { get; set; }

        public string assetModel { get; set; }

        public string model { get; set; }

        public erpPoint[] assetRegion { get; set; }

    }

我的erpPoint类如下:

class erpPoint
    {

        public double X { get; set; }
        public double Y { get; set; }
    }

现在我面临的问题是当assetRegion为null然后我得到以下异常

将值“”转换为'erp.erpPoint []'类型时出错。

scenario1正常工作:  {         “assetId”:“43711”,         “assetSerialNo”:“Sector43”,         “assetDescription”:“”,         “assetVersion”:“”,         “assetIsMovable”:“f”,         “assetType”:“项目”,         “assetModel”:“项目”,         “parentId”:“32537”,         “assetIsTrackable”:“f”,         “assetInheritsRegion”:“f”,         “assetRegion”:[             {                 “X”: - 122.69103924537,                 “Y”:49.105749366835             },             {                 “X”: - 122.69103924537,                 “Y”:49.119046702041             },             {                 “X”: - 122.68010753619,                 “Y”:49.119046702041             },             {                 “X”: - 122.68010753619,                 “Y”:49.105749366835             }         ]     }

这很好。

Scenario2:

{         “assetId”:“64374”,         “assetSerialNo”:“FeedLot”,         “assetDescription”:“”,         “assetVersion”:“”,         “assetIsMovable”:“t”,         “assetType”:“项目”,         “assetModel”:“项目”,         “parentId”:“64374”,         “assetIsTrackable”:“t”,         “assetInheritsRegion”:“f”,         “assetRegion”:“”     }

这是我得到例外的地方。 assetregion为null,现在我在设置其值时遇到异常

5 个答案:

答案 0 :(得分:5)

您有两种选择:

使用

{ get; set; }

并且您无法指定正文。

或者您必须为getter和setter 声明一个主体。

另请注意double不可为空。请改用double?

private double? x;

public double? X
{
    get { return this.x; }

    set
    {
        if (value != null)
        {
            this.x = value;
        }
    }
}

答案 1 :(得分:1)

如果要创建自定义setter,还必须提供自定义getter。通常这意味着您需要自己创建支持字段。

class a
{
    private double x;

    public double X
    {
        get 
        {
            return this.x;
        }
        set
        {
            if (value != null) // warning, see below
            {
                this.x = value;
            }
        }
    }
}

当然,您还遇到一个问题:double与所有值类型 * 一样,不可为空,这整个方法可能根本不需要。如果您想确保X永远不会设置为空值,只需将其声明为double,您就不必担心这一点。这就足够了:

class a
{
    public double X { get; set; }
}

*除了Nullable<T>

答案 2 :(得分:0)

您需要使用详细语法:

private double? x;

public double? X
{
 get { return x; }
 set { 
        if (value != null){
           x = value;
        }
    }
}

<强>更新

有人正确地指出double不能为空,将类型更改为可为空。

答案 3 :(得分:0)

您可以 使用自动属性或字段支持的属性。你不能混。在你的情况下,这将意味着

public double? DifferentPorpName
{
    get {return this.X;}
    ...
}

答案 4 :(得分:0)

就设置而言,我会将其更改为以下内容,对我来说更具说明性:

set
{                
    double x = value;
    if (value != null) x = value;
    else x = this.X;

    this.X = x;
}

您的get需要正确宣布或完全省略

我忘了问你,怎么能把null传递给double的属性?如果你尝试的话,你肯定会在运行时出错。

哎呀,其他人已经注意到了:)