2013-08-01 48 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(); 
    } 
} 

只需包含需要您的方法的名称空间。

相关问题