public abstract DataTypeEnum DataType { get; set; } = DataTypeEnum.MASTER_DATA; c#中枚举类型为什么不能这样赋值,怎么修改
时间: 2024-03-08 12:50:18 浏览: 55
在 C# 中,枚举类型是值类型,它们的默认值为零,而不是 null。因此,你不能像在这个例子中一样,为枚举类型的属性提供默认值。
如果你想要为枚举类型的属性提供默认值,你可以在类的构造函数中为属性赋值,例如:
```csharp
public abstract class MyClass
{
public DataTypeEnum DataType { get; set; }
public MyClass()
{
DataType = DataTypeEnum.MASTER_DATA;
}
}
```
在这个例子中,我们将属性的默认值设为 MASTER_DATA 枚举值,并在构造函数中为属性赋值。
当你实例化 MyClass 类的对象时,它的 DataType 属性将被初始化为 MASTER_DATA 值。如果你需要修改这个值,你可以通过访问属性来进行修改。
相关问题
public abstract DataTypeEnum DataType { get; set; } = DataTypeEnum.MASTER_DATA; c#种这行代码为什么编译不过去 怎么修改
这行代码可能会出现编译错误的原因是在 C# 6.0 之前版本中,自动属性初始值设定项只能是常数表达式。而在 C# 6.0 之后,允许自动属性初始值设定项为可赋值的表达式。
所以,如果你的 C# 版本低于 6.0,你可以将初始值设定项修改为常数表达式,例如:
```csharp
public abstract DataTypeEnum DataType { get; set; } = DataTypeEnum.MASTER_DATA;
```
修改为:
```csharp
public abstract DataTypeEnum DataType { get; set; }
public MyClass()
{
DataType = DataTypeEnum.MASTER_DATA;
}
```
这里我们将初始值设定项移到了类的构造函数中,使用赋值语句为属性赋初始值,这样就可以避免编译错误了。
如果你的 C# 版本高于 6.0,也可以直接使用原来的代码,只需要将项目的目标框架版本升级至 .NET Framework 4.6 或更高版本,或者使用 Visual Studio 2015 或更高版本进行编译即可。
帮忙优化以下代码:public void runTask(ReportResultTask data, RunListener runListener) { UseMasterDataTypeEnum dataTypeEnum = ReportCommonLogicHelper.judgeTaskParam(data); // params.put(ReportCommonMasterDataRelationHelper.ParamTypeEnum.USE_MASTER_ENUM, dataTypeEnum.getValue()); params.put(ReportCommonMasterDataRelationHelper.ParamTypeEnum.YEAR_MONTH, data.getYearAndMonth()); try { List<ReportResultInventoryConsumablesNonFirst> saveList = Collections.synchronizedList(new ArrayList<>()); ReportNonFirstInvBO bo = new ReportNonFirstInvBO(); bo.setParams(params); bo.setYearMonth(Func.toLong(data.getYearAndMonth())); LiteflowResponse response = flowExecutor.execute2Resp("flow-calc-non-first-data", bo, ReportNonFirstInvBO.class); if (response.isSuccess()) { saveList = bo.getResults(); } if (saveList != null & saveList.size() > 0) { saveList.stream().forEachOrdered(fun -> { bo.setDistributorCode(fun.getNonFirstDistributorCode()); bo.setYearMonth(fun.getYearMonth()); bo.setIdo(BigDecimal.ZERO); fun.getNonFirstData().stream().forEach(fun1 -> { bo.setProductLine(fun1.getProductLine()); LiteflowResponse idoResponse = flowExecutor.execute2Resp("flow-calc-non-first-calcIdo", bo, ReportNonFirstInvBO.class); if (idoResponse.isSuccess()) { if (fun1.getProductLine().equals(IDO_TOTAL_PL)) { fun1.getItemData().stream().filter(fun2 -> ResultConstance.IDO_TOTAL.equals(fun2.getItemName())).forEach(x -> x.setItemValue(bo.getIdo())); } else { fun1.getItemData().stream().filter(fun2 -> ResultConstance.IDO.equals(fun2.getItemName())).forEach(x -> x.setItemValue(bo.getIdo())); } } }); }); this.updateSystemFieldInfo(saveList, data); inventoryConsumablesNonFirstService.insertBatch(saveList); runListener.complete(); } else { runListener.error(String.format("所选【%s-%s】产品/经销商主数据为空", data.getYearAndMonth(), "")); } } catch (Exception e) { log.error(StringUtil.format("非一级试剂耗材库存报表处理出错【{}】", e.getMessage()), e); runListener.error(StringUtil.format("非一级试剂耗材库存报表处理出错【{}】", e.getMessage())); } }
) { // 使用 Java 8 的 Stream API 来并行处理列表中的数据,提高处理速度 saveList.parallelStream().forEach(item -> { // 业务逻辑处理 }); // 将处理结果通过回调函数传递回去 runListener.onSuccess(data); } else { runListener.onFailed(data, new RuntimeException("saveList is null")); } } catch (Exception e) { runListener.onFailed(data, e); } }
另外,建议对代码进行注释,使得代码更易于理解和维护。
阅读全文