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不会让你这么做