7

多くのコードをVB.netからc#に変換していますが、変換中に発生したと思われる別の問題があります。

if (sRow.Cells[1].Value == true)
    Worked = "X";
else if (sRow.Cells[2].Value == true)
    Vacation = "X";
else if (sRow.Cells[3].Value == true)
    Sick = "X";
else if (sRow.Cells[4].Value == true)
    Holiday = "X";

if / else / else if行のそれぞれで、このエラーが発生します。私は私に頭を悩ませることを強いる何かが欠けていると確信しています...

エラー7演算子'=='はタイプ'object'および'bool'のオペランドには適用できません

4

4 に答える 4

11

これらの値がタイプであることを確認しますboolか?

その場合は、明示的にキャストします。

if ((bool)sRow.Cells[1].Value)
{
    Worked = "X";
}
else if ((bool)sRow.Cells[2].Value)
{
    Vacation = "X";
}
else if (sRow.Cells[3].Value)
{
    Sick = "X";
}
else if ((bool)sRow.Cells[4].Value)
{
    Holiday = "X";
}
于 2012-08-14T22:47:07.530 に答える
5

これは、値が型の DataRow のセルであると想定していますobject。bool を持つオブジェクトを==演算子で比較することはできません。

したがって、強く型付けされた次Fieldの拡張機能を使用する必要がありDataRowます。

if(sRow.Field<bool>(1))
    // ...
于 2012-08-14T22:50:58.847 に答える
2

私はif (x == true)一般的にファンではありませんが、if ((bool)sRow.Cells[1].Value)orを使用するif (Convert.ToBoolean(sRow.Cells[1].Value))と、認知負荷の点でかなり不透明に思えます。

これは機能的な代替手段です。

if (true.Equals(sRow.Cells[1].Value))
    Worked = "X";
else if (true.Equals(sRow.Cells[2].Value))
    Vacation = "X";
else if (true.Equals(sRow.Cells[3].Value))
    Sick = "X";
else if (true.Equals(sRow.Cells[4].Value))
    Holiday = "X";

編集:null値をサポートするために比較を逆にしました。

明らかにボクシング コストがかかりますが、コードが特に反復的でない場合、それは目立ちません。

一部の人々は、ヨーダの状態に先送りされることもあります.

ただし、このアプローチは機能しますが、DBNull のキャスト/変換は失敗します。

object x = DBNull.Value;
if (true.Equals(x)); // False
if (Convert.ToBoolean(x)); // InvalidCastException: Object cannot be cast from DBNull to other types.
if ((bool)x); // InvalidCastException: Specified cast is not valid.
于 2014-10-29T15:15:43.060 に答える
1

エラー7演算子'=='はタイプ'object'および'bool'のオペランドには適用できません

そのエラーはあなたにそれを伝えています:

演算子'=='は、タイプ'object'および'bool'のオペランドには適用できません。

Valueはタイプobjectなので、そのように比較したい場合はキャストする必要があります。

したがって、Valueの基になる型が実際にブール値であることを確認してから...trueまたはfalseとの明示的な比較をダンプします。それは議論の余地があり、文体的ですが、真剣に冗長で不必要です。「真が真に等しいなら...」と言うことはありますか? いいえ、おそらく(うまくいけば)そうではありません。

于 2012-08-14T22:46:25.120 に答える