C#开发 降.NET版本问题记录
以下都是我在使用.NET4.7.2版本开发控件完成后又将控件代码降位使用.NET4.5时所遇到的问题,和解决方式
-
Struct构造函数:“必须将字段完全分配,然后控制权才能返回给调用者。”
原始的代码和错误如下:
如果在具有自动属性的结构上看到此错误,只需通过执行以下: this()示例从已参数化的结构中调用无参数构造函数:
public struct MyPoint
{
public decimal X { get; set; }
public decimal Y { get; set; }
public MyPoint(decimal x, decimal y) : this()
{
X = x;
Y = y;
}
}
通过从构造函数声明中调用:this(),您可以让ValueType基类初始化自动属性的所有后备字段。我们无法在构造函数上手动执行此操作,因为我们无权访问自动属性的后备字段。
ValueType是所有结构的基类。
如此问题便可以得到解决。
2.赋值问题
public string displayText { get; set; } = "电力曲线图";
public string sidebarText { get; set; } = "EVADA";
像以上代码这样给变量赋值,在低版本中是不支持的,所以我们将全部改为在构造方法中赋值。
在.NET Framework 4.5 中,使用属性初始化器(Property Initializers)是不支持的,因此需要在构造函数中初始化这些属性。
例如:
// 构造函数
public 你的构造方法()
{
displayText = "电力曲线图";
sidebarText = "EVADA";
}
3.返回值问题 语法(get => value;
)
get => curveEntity._dataSource;
以上代码是C# .NET4.7.2版本下的代码,【 get => curveEntity._dataSource;】在.NET 4.5版本编译无法通过
在.NET Framework 4.5 版本中,使用 C# 6.0 引入的简化属性(Expression-bodied property)语法(get => value;
)是不支持的。需要使用传统的 get
语法。以下是.NET Framework 4.5 兼容的代码:
get { return curveEntity._dataSource; }
4.条件成员访问表达式(null 条件运算符 ?.
)
if (data?.Count > 1)
以上代码是C# .NET4.7.2版本下的代码,【if (data?.Count > 1)】在.NET 4.5版本编译无法通过
在.NET Framework 4.5 中,不支持条件成员访问表达式(null 条件运算符 ?.
)。可以使用传统的条件判断语句来替代。以下是.NET Framework 4.5 兼容的代码:
if (data != null && data.Count > 1)
再例如:文章来源:https://www.uudwc.com/A/Y63dk/
DataRefreshed?.Invoke(this, EventArgs.Empty);
修改为:文章来源地址https://www.uudwc.com/A/Y63dk/
if (DataRefreshed != null)
{
DataRefreshed(this, EventArgs.Empty);
}