2013-08-01 47 views
1

將一些代碼從一個控制器複製到另一個控制器。這兩個文件都有相同的使用語句,但它不會爲我解決這個問題。爲什麼不能訪問.TrimSafe?

在我的第一個文件address.Name.Value = source.Name.TrimSafe(); 是好的,但在我的第二個文件。 .TrimSafe標記爲不存在 從telescense我可以選擇修剪,trimEnd或trimStart哪裏有trimSafe去了,爲什麼我不能使用它?

+0

這兩個文件是否使用相同的命名空間? – Shaz

+0

不,但它們應該不同 – John

+0

查看第一個文件中的「使用」指令列表,並將它們與第二個文件進行比較。 TrimSafe()可能是未在第二個文件中導入的擴展方法。 –

回答

3

TrimSafe()不是標準的.NET方法。這表明TrimSafe()作爲第一個文件中的方法存在,但從未複製到第二個文件中,並且它是一個私有函數或非靜態函數。我會清理&重建你的項目。

+0

不,不存在作爲第一個文件中的方法。 'source'是一個虛擬機,它沒有提到任何關於trimsafe的內容。也乾淨和重建沒有工作,但謝謝 – John

+0

我會補充說,如果它是靜態的,他需要'使用'它的名稱空間。 – Shaz

+1

它是在原始命名空間文件夾中的一個strinExtension.cs文件感謝您的幫助 – John

0

這聽起來像一個命名空間問題給我。

考慮一下:

// In some file somewhere 
namespace firstNamespace 
{ 
    Class MyString : String 
    { 
     public static TrimSafe() {} 
    } 
} 

// The first file you copied from 
namespace firstNamespace 
{ 
    public void foo() { TrimSafe(); } // Works! 
} 

namespace secondNamespace 
{ 
    public void fee() { TrimSafe(); } // Nope :(
} 

要解決的最後一個,你需要在與其他using語句頂部添加using firstNamespace;。原因是你從第一個文件拷貝到TrimSafe所在的同一個命名空間。

在C++中,您通常使用#include所有引用的.h文件。

在C#中,您不會爲類添加using語句,而是爲名稱空間添加語句。您只需要名稱空間爲using,並且該名稱空間內的所有內容都伴隨着它。在命名空間xyz中定義的任何內容都可以在命名空間xyz中定義其他所有內容,而不必爲每個類設置using

您的第二個文件位於不同的命名空間中,因此它不知道第一個命名空間中的內容,因此它看不到TrimSafe。

無論如何,這是我的猜測。

0

看起來很熟悉,我想你是做果園網上商店教程以及:) 您需要在您的項目稱爲助手添加文件夾,它應該有這個類是:

public static class StringExtensions { 
    public static string TrimSafe(this string s) { 
     return s == null ? string.Empty : s.Trim(); 
    } 
} 

只需包含需要您的方法的名稱空間。

相關問題