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