C# 如何设置变量的属性

C# 如何设置变量的属性,c#,C#,这是我的函数,它获取数据库中的所有项目 public bool getUserProjects(ref List<erpAssets>userProjects) { string arguments = "{\"sessionId\":\"" + m_LoggedInUser.sessionId + "\"," + "\"assetType\":\"" + PROJECT_A

这是我的函数,它获取数据库中的所有项目

 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            
        }
我的ERPOINT课程如下:

 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; }

    }
class erpPoint
    {

        public double X { get; set; }
        public double Y { get; set; }
    }
现在我面临的问题是,当assetRegion为null时,我会得到以下异常

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

场景1工作正常: { “assetId”:“43711”, “assetSerialNo”:“Sector43”, “资产说明”:“, “资产版本”:“, “可移动资产”:“f”, “资产类型”:“项目”, “资产模型”:“项目”, “家长ID”:“32537”, “可追踪资产”:“f”, “资产及其地区”:“f”, “资产区”:[ { “X”:-122.69103924537, “Y”:49.105749366835 }, { “X”:-122.69103924537, “Y”:49.119046702041 }, { “X”:-122.68010753619, “Y”:49.119046702041 }, { “X”:-122.68010753619, “Y”:49.105749366835 } ] }

这很好用

场景2:

{ “assetId”:“64374”, “assetSerialNo”:“饲养场”, “资产说明”:“, “资产版本”:“, “可移动资产”:“t”, “资产类型”:“项目”, “资产模型”:“项目”, “家长ID”:“64374”, “可追踪资产”:“t”, “资产及其地区”:“f”, “assetRegion”:” }

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

您有两个选择:

使用

您不能指定实体

或者必须为getter和setter声明一个body

还要注意的是,
double
不可为空。改用
double?

private double? x;

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

    set
    {
        if (value != null)
        {
            this.x = value;
        }
    }
}
你有两个选择:

使用

您不能指定实体

或者必须为getter和setter声明一个body

还要注意的是,
double
不可为空。改用
double?

private double? x;

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

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

您需要使用详细语法:

private double? x;

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


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

您需要使用详细语法:

private double? x;

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

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

您可以使用自动属性或由字段支持的属性。你不能混在一起。对你来说,这意味着

public double? DifferentPorpName
{
    get {return this.X;}
    ...
}
您可以使用自动属性或由字段支持的属性。你不能混在一起。对你来说,这意味着

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

就set而言,我将其更改为以下内容,这对我来说更具声明性:

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

    this.X = x;
}
您的
get
需要正确声明或完全忽略

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


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

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

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

    this.X = x;
}
您的
get
需要正确声明或完全忽略

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


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

如果您想创建自定义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; }
}

*如果要创建自定义setter,除了可以为null之外,还必须提供自定义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

double不能为null double不能为null警告
StackOverFlowException
发现得很好。空检查的主体应该设置为
x
,而不是
x
。警告
StackOverFlowException
被正确发现。空检查的主体应该设置为
x
,而不是
x
。主席先生,我得到了一个例外,即无法分配“”值,这就是我设置空的原因check@MuneemHabib你在哪里得到那个错误?在这里显示的任何代码中都不能使用它。如果您包含完整的用例,我们可能能够指出真正的问题或提供替代解决方案。但是,这可能超出了目前这个问题的范围,您最好打开一个新问题来解决这个问题。先生,我得到了一个例外,即不能分配“”值,这就是我将其设置为null的原因check@MuneemHabib你从哪里得到那个错误的?在这里显示的任何代码中都不能使用它。如果您包含完整的用例,我们可能能够指出真正的问题或提供替代解决方案。然而,这可能超出了目前这个问题的范围,您最好打开一个新问题来解决这个问题。声明一个不必要的变量并不会使它成为声明性的。您肯定不会在运行时出错,而是在编译时出错。另外,还有一个堆栈溢出正在等待发生。正如我说的,对我来说更具声明性:)很明显,VisualStudio不会让你这么做