将一些代码从一个控制器复制到另一个控制器。这两个文件都有相同的using语句,但它不会为我解决这个问题。
在我的第一个文件address.Name.Value = source.Name.TrimSafe();
上
但是在我的第二个文件上没问题。 .TrimSafe标记为不存在
从telescense我可以选择trim,trimEnd或trimStart,其中有trimSafe去了,为什么我不能使用它?
答案 0 :(得分:3)
TrimSafe()
不是标准的.NET方法。这表明TrimSafe()
作为第一个文件中的方法存在,但从未被复制到第二个文件中,并且它是私有函数或非静态函数。
我会干净&重建你的项目。
答案 1 :(得分: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 firstNamespace;
和其他using语句。原因是您复制的第一个文件与定义TrimSafe的文件名位于同一名称空间中。
在C ++中,您通常会#include
您使用的每个类的所有引用的.h文件。
在C#中,您不能为类添加using
语句,而是添加名称空间。您只需要using
命名空间,并且该命名空间内的所有内容都随之出现。在命名空间xyz
中定义的任何内容都可以看到命名空间xyz
中定义的所有内容,而不必为每个类都设置using
。
您的第二个文件位于不同的命名空间中,因此它不知道第一个命名空间中的内容,因此它没有看到TrimSafe。
无论如何,这是我的猜测。
答案 2 :(得分:0)
看起来很熟悉,我猜你也在做Orchard网上商店的教程:) 您需要在项目中添加一个名为Helpers的文件夹,它应该包含此类:
public static class StringExtensions {
public static string TrimSafe(this string s) {
return s == null ? string.Empty : s.Trim();
}
}
只需包含需要方法的命名空间。