Передача параметра методу выдает «Не удается получить доступ к методу в пространстве имен»

#c#

#c#

Вопрос:

Я пытаюсь использовать этот метод, но я запутался в том, что / как передать ему параметр.

 void SaveReport(Telerik.Reporting.Report report, string fileName)
{
    ReportProcessor reportProcessor = new ReportProcessor();
    Telerik.Reporting.InstanceReportSource instanceReportSource = 
        new Telerik.Reporting.InstanceReportSource();
    instanceReportSource.ReportDocument = report;
    RenderingResult result = 
        reportProcessor.RenderReport("PDF", instanceReportSource, null);

    using (FileStream fs = new FileStream(fileName, FileMode.Create))
    {
        fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
    }
}
  

Я попытался передать имя отчета, который мне нужно экспортировать, который находится в библиотеке, таким образом:

2-я модификация

 protected void Button1_Click(object sender, EventArgs e)
{
    string fileName = "SS";
    var report = BOMreports.Report321();
    SaveReport(report, fileName );
}
  

Но я продолжаю получать ошибку «не удается получить доступ к методу в пространстве имен» в отчете var.
Я решаю это?

Комментарии:

1. Что такое BOMReports? Класс или пространство имен?

2. Это класс, который содержит несколько отчетов.

3. Почему аргументы в SaveReport расположены в неправильном порядке? В сигнатуре метода это так, report, fileName но при вызове вы передаете fileName, report .

4. Вы уверены, что получаете ошибку из этой строки? Попробуйте var report = BOMReports.Report321(); SaveReport(filename, report); в двух строках. Посмотрите, в какой строке появляется ошибка.

5. Показать BOMreports код.

Ответ №1:

Похоже, что у вас конфликт в BOMreports классе и пространстве имен с тем же именем. И поскольку ваше пространство имен находится в той же сборке, что и ваш код, а класс находится в другой сборке, компилятор ссылается на него, когда вы используете имя в своем коде. Попробуйте получить доступ к классу с его полным идентификатором как:

 namespace.BOMreports.Report321();
  

Другое дело, убедитесь, что Report321 это статический метод, который возвращает объект Telerik.Reporting.Report .

Добавление

Если Report321 это класс в BOMreports , то вы делаете это неправильно. Что вам нужно сделать, так это создать его экземпляр следующим образом:

 var report = new BOMreports.Report321();
  

Комментарии:

1. Я исследовал ваш намек, но если я чего-то не упустил из вашего ответа, в такой DLL нет конфликтов. Пространство имен — BOMreports, а имя файла в таком пространстве имен — класс «Report321», который отлично работает в нескольких других контекстах.

2. @Nullbyte Значит, Report321 не является методом?

3. Нет, BOMreports — это библиотека классов, содержащая несколько классов, одним из которых является Report321.

4. Ты звезда! В этом и заключалась проблема. с вашим обновленным ответом проблема решена.

5. @Nullbyte Я не звезда: p Я думаю, тебе нужно немного кофе. Вот и все: D