私はちょうどいくつかのスイッチステートメントに少し問題があります。私は最終目的を達成するためのより良い方法があると感じています。c#ヌルチェック付きのリファクタリングスイッチ文
本質的に私はメソッドにviewmodelを渡しています。このメソッドは、最初にビューモデルが関連するオブジェクトをデータベースから取得し、その後、switch文は特定のプロパティに対してnullチェックを行います。その結果に基づいて、別のswitch文は、ビューモデルに対して別のnullチェックを行います。各ポイントでデータベースからオブジェクトに値が割り当てられ、最後にデータベースの更新が行われます。ここで
コード
public async Task UpdateContractWithRepository(ViewModel viewModel)
{
// Get the contract from db
Contract contract = GetContract(viewModel.Id);
switch (viewModel.RepositoryId == null)
{
case true:
switch (contract.RepositoryId == null)
{
case true:
// nothing to do
// no change
break;
case false:
// Unassign Repository
UpdateRepositoryAssignment(contract.RepositoryId, false);
// Update properties
contract.RepositoryId = null;
contract.ConsumedUnits = null;
break;
}
break;
case false:
switch (contract.RepositoryId == null)
{
case true:
// assign repository
UpdateRepositoryAssignment(viewModel.RepositoryId, true);
// Get repository
Repository repository = GetRepository(viewModel.RepositoryId);
// Update properties
contract.RepositoryId = repository.Id;
contract.ConsumedUnits = repository.Units;
break;
case false:
// assign repository
UpdateRepositoryAssignment(viewModel.RepositoryId, true);
// Get repository
Repository repository = GetRepository(viewModel.RepositoryId);
// Update properties
contract.RepositoryId = repository.Id;
contract.ConsumedUnits = repository.Units;
break;
}
break;
}
UpdateContract(contract);
}
は、私は私はおそらくswitch文を廃止し、文ではなく、まだ私が言うことができるものから、いくつかのネストが存在することになる場合には使用することができます思っています。誰かが何か提案があったかどうかだけ考えました。
私はここでswitch文をリファクタリングしましたが、実際にはnullチェックをカバーしていないようです。
ご協力いただきましてありがとうございます。
なぜ簡単なif/then/else文でswitch文を使用していますか? if文に切り替えるほうが良いのではないでしょうか? また、スイッチで多くの作業をしている場合は、独自の(プライベート)メソッドを組み込む方が良いでしょう。 –
2番目のswitch文にはバグがあるようです...真と偽の両方が同じコードを実行します... – forsvarir