2013-08-01 6 views
1

Скопировал код с одного контроллера на другой. Оба файла имеют одинаковые операторы, но он не «разрешит» эту проблему для меня.Почему я не могу получить доступ .TrimSafe?

В моем первом файле address.Name.Value = source.Name.TrimSafe(); хорошо, однако, в моем втором файле. .TrimSafe флаги вверх как не существует Из telescense я могу выбрать trim, trimEnd или trimStart, где уходит trimSafe, и почему я не могу использовать его?

+0

Оба файла используют одно и то же пространство имен? – Shaz

+0

нет, но они должны быть разными – John

+0

Посмотрите на свой список «использования» директив в первом файле и сравните их со вторым файлом. TrimSafe() может быть методом расширения, который не импортируется во второй файл. –

ответ

3

TrimSafe() не является стандартным методом .NET. Это предполагает, что TrimSafe() существует как метод в вашем первом файле, но никогда не был скопирован ко второму, и это либо частная функция, либо нестатическая функция.

Я бы убрал & перестроил ваш проект.

+0

Нет, не существует как метод в первом файле. «source» - это виртуальная машина, которая ничего не упоминает о trimsafe. Кроме того, clean и rebuild didnt работают, но спасибо – 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 firstNamespace; в верхней части с другими с помощью утверждений. Причина в том, что первый файл, который вы копируете, находится в том же пространстве имен, где определено TrimSafe.

В C++ вы, как правило, #include все указанные файлы .h для каждого класса, который вы используете.

В C# вы не добавляете операторы using для классов, а вместо этого для пространств имен. Вам должно быть только using пространство имен, и все внутри этого пространства имен вместе с ним. Все, что определено в пространстве имен xyz, видит все остальное, определенное в пространстве имен xyz, без необходимости иметь using для каждого класса.

Ваш второй файл находится в другом пространстве имен, и поэтому он не знает, что находится в первом пространстве имен, и поэтому он не видит TrimSafe.

Это мое предположение в любом случае.

0

кажется знакомым, я предполагаю, что вы делаете учебники Orchard Webshop а :) Вам нужно добавить папку в вашем проект под названием помощников, и он должен иметь этот класс в нем:

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

Просто укажите пространство имен, в котором нужен ваш метод.