.NET バージョンのダウングレードに関する C# 開発問題の記録
以下は、.NET4.7.2 バージョンを使用してコントロールを開発し、その後 .NET4.5 を使用するようにコントロール コードをダウングレードしたときに遭遇した問題と解決策です。
元のコードとエラーは次のとおりです。
自動プロパティを持つ構造体でこのエラーが発生した場合は、次の手順を実行して、パラメーター化された構造体からパラメーターなしのコンストラクターを呼び出します。 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 では、プロパティ初期化子 (プロパティ初期化子) の使用はサポートされていないため、これらのプロパティはコンストラクターで初期化する必要があります。
例えば:
// 构造函数
public 你的构造方法()
{
displayText = "电力曲线图";
sidebarText = "EVADA";
}
3. 戻り値問題の構文 ( get => value;
)
get => curveEntity._dataSource;
上記コードはC# .NET4.7.2版でのコードですが、.NET 4.5版では[get =>curveEntity._dataSource;]はコンパイルできません。
.NET Framework バージョン 4.5 では、get => value;
C# 6.0 で導入された簡素化されたプロパティ (式本体のプロパティ) 構文 ( ) の使用はサポートされていません。従来の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)
もう一つの例:
DataRefreshed?.Invoke(this, EventArgs.Empty);
着替える:
if (DataRefreshed != null)
{
DataRefreshed(this, EventArgs.Empty);
}