2012-08-02 71 views
9

當我申請這行代碼在我的cs文件,成員'object.Equals(object,object)'不能用實例引用訪問;與類型名

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", StringComparer.CurrentCultureIgnoreCase) ? 80 : 0; 

限定它,我得到這個錯誤:成員'object.Equals(object,object)'不能被實例引用訪問;相反,使用類型名稱來限定它。

我不確定這個問題,我希望你們能幫助我。非常感謝。

回答

3
int totalValue = 0; 
int total = 0; 
totalValue = int.Parse("2".ToString()) * int.Parse("2".ToString()); 
string s = "Yes"; 
totalValue += s.Equals("Yes",StringComparison.CurrentCultureIgnoreCase) ? 80 : 0; 
2

equals方法是一個靜態方法,你無法通過實例

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

訪問它(我不能編譯,測試它,但我認爲它應該工作)

9

您正在使用錯誤的參數類型。您可以使用Equals作爲一個實例級方法或類級(靜態)方法:

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

str1.Equals(str2, StringComparison comp); 

因此,在這兩個,你需要StringComparison,不StringComparer。和你的一個:

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

+1只有答案突出顯示問題是由於使用StringComparer而不是正確的StringComparison。 – 2015-05-03 19:39:25

0

您的代碼不強。

Session是一個對象,它可以爲空,所以如果你想使用它的值,請先檢查會話,甚至會話的值不是整數值。

我建議你這樣做:

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

正確的工作代碼:

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類的靜態屬性。 而不是使用枚舉StringComparison

作爲String.Equals(str1,str2,StringComparison.CurrentCultureIgnoreCase);str1.Equals(str2,StringComparison.CurrentCultureIgnoreCase);

既需要枚舉StringComparison因爲方法參數。

現在,這引發了一些問題,爲什麼你無法識別你的IDE中的這個錯誤。

這是因爲,由於StringComparer抽象類CurrentCultureIgnoreCase靜態吸氣屬性,它返回類型StringComparer類的一個對象

public static StringComparer CurrentCultureIgnoreCase { get; } 

因此編譯器處理你的 「Equals」 方法的Object Class

即 「Equals」 的方法,

public static bool Equals(object objA, object objB); 

對於一些其他的誰是好奇關於使用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")); 
    } 

更多詳細信息如下https://www.dotnetperls.com/stringcomparer

編碼愉快。

相關問題