20

C#で次のコードを使用すると...

int totalValue = 0;
int total = 0;
totalValue = int.Parse(Session["price"].ToString()) * int.Parse(Session["day"].ToString());

// This line causes the error
totalValue += Session["IsChauffeurUsed"].ToString().Equals("Yes", StringComparer.CurrentCultureIgnoreCase) ? 80 : 0;

... このエラーを受け取りました:

メンバー 'object.Equals(object, object)' には、インスタンス参照ではアクセスできません。代わりに型名で修飾してください。

そのエラーは何を示していますか?

4

7 に答える 7

19

間違ったパラメータ タイプを使用しています。Equalsインスタンス レベルのメソッドまたは型レベル (静的) メソッドとして使用できます。

string.Equals(str1, str2, StringComparison comp);

str1.Equals(str2, StringComparison comp);

StringComparisonしたがって、両方で、ではなくが必要ですStringComparer。そしてあなたのもの:

totalValue += Session["IsChauffeurUsed"].ToString().Equals("Yes", StringComparison.CurrentCultureIgnoreCase) ? 80 : 0;
于 2012-08-02T08:09:33.093 に答える
5

「Equals」の 2 番目のパラメーターの引数の型が間違っているため、コンパイラは間違ったオーバーロードを識別しています。

これを修正するには、次のように変更します。

StringComparer.CurrentCultureIgnoreCase

これに:

StringComparison.CurrentCultureIgnoreCase
于 2012-08-02T07:53:22.987 に答える
3

Equals メソッドは静的メソッドであり、インスタンス経由でアクセスすることはできません

string isChauffeurUsed = Session["IsChauffeurUsed"].ToString();
totalValue += string.Equals(isChauffeurUsed, "Yes", 
                     StringComparison.CurrentCultureIgnoreCase) 
              ? 80 
              : 0;
于 2012-08-02T07:51:59.750 に答える
0

あなたのコードは強力ではありません。

Sessionはオブジェクトであり、null になる可能性があるため、その値を使用する場合は、最初にセッションを確認してください。セッションの値でさえ整数値ではありません。

次のようにすることをお勧めします。

int? i = Session["s"] == null ? null : Parser.ParseInt(Session["s"].ToString());
于 2012-08-02T08:13:35.130 に答える
0
totalValue += string.Equals(Session["IsChauffeurUsed"].ToString(), "Yes", StringComparison.CurrentCultureIgnoreCase) ? 80 : 0;

(コンパイルしてテストすることはできませんでしたが、動作するはずです)

于 2012-08-02T07:53:58.310 に答える