Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 成员';对象。等于(对象,对象)';无法使用实例引用访问;改为使用类型名称限定它_C#_Asp.net - Fatal编程技术网

C# 成员';对象。等于(对象,对象)';无法使用实例引用访问;改为使用类型名称限定它

C# 成员';对象。等于(对象,对象)';无法使用实例引用访问;改为使用类型名称限定它,c#,asp.net,C#,Asp.net,当我在C#中使用以下代码时 。。。我收到了这个错误: 无法使用实例引用访问成员“object.Equals(object,object)”;改为使用类型名称限定它 该错误表示什么?Equals方法是一个静态方法,您无法通过实例访问它 string isChauffeurUsed = Session["IsChauffeurUsed"].ToString(); totalValue += string.Equals(isChauffeurUsed, "Yes",

当我在C#中使用以下代码时

。。。我收到了这个错误:

无法使用实例引用访问成员“object.Equals(object,object)”;改为使用类型名称限定它


该错误表示什么?

Equals方法是一个静态方法,您无法通过实例访问它

string isChauffeurUsed = Session["IsChauffeurUsed"].ToString();
totalValue += string.Equals(isChauffeurUsed, "Yes", 
                     StringComparison.CurrentCultureIgnoreCase) 
              ? 80 
              : 0;

“Equals”第二个参数的参数类型错误,因此编译器识别的重载错误

要修复此问题,请更改以下内容:

StringComparer.CurrentCultureIgnoreCase
为此:

StringComparison.CurrentCultureIgnoreCase

(我无法编译它来测试它,但我认为它应该可以工作)

您使用了错误的参数类型。您可以将
Equals
用作实例级方法或类型级(静态)方法:

因此,在这两种情况下,都需要
StringComparison
,而不是
stringcomparier
。还有你的一个:

totalValue += Session["IsChauffeurUsed"].ToString().Equals("Yes", StringComparison.CurrentCultureIgnoreCase) ? 80 : 0;

你的代码不强

Session
是一个对象,它可以为null,因此如果要使用它的值,请先检查Session,即使Session的值不是整数值

我建议你这样做:

int? i = Session["s"] == null ? null : Parser.ParseInt(Session["s"].ToString());

正确的工作代码:

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

// This line
totalValue += Session["IsChauffeurUsed"].ToString().Equals("Yes", StringComparison.CurrentCultureIgnoreCase) ? 80 : 0;
问题:

您正在使用StringComparer类的静态属性。 而是使用enum
StringComparison

As
String.Equals(str1、str2、StringComparison.CurrentCultureIgnoreCase)
str1.Equals(str2,StringComparison.CurrentCultureIgnoreCase)

两者都将enum StringComparison作为方法参数

现在,这提出了一些问题,为什么您不能在ide中识别这个错误

这是因为,StringComparer是一个抽象类CurrentCultureInoRecase是一个静态getter属性,它返回类型为StringComparer类的对象

i、 e

因此,编译器将您的“
Equals
”方法视为
对象类的“
Equals
”方法

i、 e

对于一些对StringComparer类的使用感到好奇的其他人

下面是一个例子:

static void Main()
    {
        // Use these two StringComparer instances for demonstration.
        StringComparer comparer1 = StringComparer.Ordinal;
        StringComparer comparer2 = StringComparer.OrdinalIgnoreCase;

        // First test the results of the Ordinal comparer.
        Console.WriteLine(comparer1.Equals("value-1", "value-1")); // True
        Console.WriteLine(comparer1.Equals("value-1", "VALUE-1")); // False
        Console.WriteLine(comparer1.Compare("a", "b"));
        Console.WriteLine(comparer1.Compare("a", "a"));
        Console.WriteLine(comparer1.Compare("b", "a"));

        // Test the results of the OrdinalIgnoreCase comparer.
        Console.WriteLine(comparer2.Equals("value-1", "value-1")); // True
        Console.WriteLine(comparer2.Equals("value-a", "value-b")); // False
        Console.WriteLine(comparer2.Equals("value-1", "VALUE-1")); // True
        Console.WriteLine(comparer2.Compare("a", "B"));
        Console.WriteLine(comparer2.Compare("a", "A"));
        Console.WriteLine(comparer2.Compare("b", "A"));
    }
更多详情请参见


快乐编码。

我知道这已经很晚了,也可能不直接适用于用户的情况,只是添加这个答案来帮助那些面临相同问题但由于不同原因的人

字符串实例的
Equal()
方法需要第一个参数作为
string
type


所以,如果第一个参数不是
string
类型,而是另一种类型,比如说
int
,您会遇到同样的错误,有时可能会产生误导,因为它不会直接说第一个参数应为string类型。

+1唯一突出问题的答案是使用StringComparer而不是正确的StringComparator。对于那些努力寻找实际解决方案的人来说,问题在于
StringComparer
枚举。
Equals
调用正在解析为通用的
对象.Equals
方法,而不是
字符串.Equals
。您应该使用
stringcomparison
enum,以便它使用
string.Equals
方法。
int? i = Session["s"] == null ? null : Parser.ParseInt(Session["s"].ToString());
int totalValue = 0;
int total = 0;
totalValue = int.Parse(Session["price"].ToString()) * int.Parse(Session["day"].ToString());

// This line
totalValue += Session["IsChauffeurUsed"].ToString().Equals("Yes", StringComparison.CurrentCultureIgnoreCase) ? 80 : 0;
public static StringComparer CurrentCultureIgnoreCase { get; }
public static bool Equals(object objA, object objB);
static void Main()
    {
        // Use these two StringComparer instances for demonstration.
        StringComparer comparer1 = StringComparer.Ordinal;
        StringComparer comparer2 = StringComparer.OrdinalIgnoreCase;

        // First test the results of the Ordinal comparer.
        Console.WriteLine(comparer1.Equals("value-1", "value-1")); // True
        Console.WriteLine(comparer1.Equals("value-1", "VALUE-1")); // False
        Console.WriteLine(comparer1.Compare("a", "b"));
        Console.WriteLine(comparer1.Compare("a", "a"));
        Console.WriteLine(comparer1.Compare("b", "a"));

        // Test the results of the OrdinalIgnoreCase comparer.
        Console.WriteLine(comparer2.Equals("value-1", "value-1")); // True
        Console.WriteLine(comparer2.Equals("value-a", "value-b")); // False
        Console.WriteLine(comparer2.Equals("value-1", "VALUE-1")); // True
        Console.WriteLine(comparer2.Compare("a", "B"));
        Console.WriteLine(comparer2.Compare("a", "A"));
        Console.WriteLine(comparer2.Compare("b", "A"));
    }