#c#
Вопрос:
Хорошо, я знаю, что это довольно распространенный вопрос, но ответ, казалось, всегда заключался в том, чтобы сделать интерфейс общедоступным. Ну, мой интерфейс общедоступен, и я получаю эту ошибку
Ошибка CS0050 Несогласованная доступность: возвращаемый тип «IEnumerablelt;loadDatagt; менее доступен, чем метод» ILoanSelector.СелектСериалы()’
Вот мой код.
namespace EscrowAnalysis { public interface ILoanSelector { IEnumerablelt;LoanDatagt; SelectSerials(); } class LoanSelector : ILoanSelector { public string ConnectionString { get; } public string LinkedServer { get; private set; } public LoanSelector(string connectionString, string linkedServer) { if (String.IsNullOrWhiteSpace(connectionString)) throw new ArgumentNullException(nameof(connectionString)); if (String.IsNullOrWhiteSpace(linkedServer)) throw new ArgumentNullException(nameof(linkedServer)); ConnectionString = connectionString; LinkedServer = linkedServer; } public IEnumerablelt;LoanDatagt; SelectSerials() { var result = new Listlt;LoanDatagt;(); using (var connection = new SqlConnection(ConnectionString)) { var command = connection.CreateCommand(); command.CommandType = System.Data.CommandType.Text; command.CommandText = @"SELECT LOAN_SERIAL, CLOSE_DATE FROM OPENQUERY(@linkedserver,' SELECT l.Serial AS LOAN_SERIAL, l.CLOSE_DATE FROM core.loan l INNER JOIN core.account la ON la.serial = l.parent_serial INNER JOIN core.person p ON p.serial = la.primary_person_serial INNER JOIN core.ln_type lt ON lt.serial = l.type_serial AND lt.CRED_REP_PORTFOLIO_TYPE = ''M'' INNER JOIN core.share s ON s.serial = l.IMPOUND_SHARE_SERIAL AND s.TYPE_SERIAL IN (SELECT serial FROM core.sh_type st WHERE DESCRIPTION LIKE ''%Escrow%'') INNER JOIN core.account sa ON sa.serial = s.PARENT_SERIAL LIMIT 500 ');".Replace("@linkedserver",LinkedServer); connection.Open(); var reader = command.ExecuteReader(); while (reader.Read()) { LoanData tempObj = new LoanData(Convert.ToInt64(reader["LOAN_SERIAL"]), Convert.ToDateTime(reader["CLOSE_DATE"])); result.Add(tempObj); } } return result; } }
Пожалуйста, помогите, я не уверен, что еще нужно сделать, чтобы удовлетворить VS.
Комментарии:
1. Я предполагаю, что ваш
LoanData
класс является внутренним??2. Это кажется мне странным. У вас есть селектор ILoanSelector интерфейса с IEnumerablelt;LoanDatagt;, а затем его объединение с селектором LOANS, в то время как общедоступный IEnumerablelt;LoanDatagt;lt;Loandatagt; SelectSerial встроен в тот же класс. Разве это не должно быть в своем собственном классе?
3. Убедитесь
LoanData
, что класс также объявлен какpublic
.
Ответ №1:
Иду на риск здесь. Не уверен, что вы пытаетесь сделать. Но я думаю, что ты хочешь чего-то подобного:
namespace EscrowAnalysis { public class foobar { public IEnumerablelt;LoanDatagt; SelectSerials() { var result = new Listlt;LoanDatagt;(); using (var connection = new SqlConnection(ConnectionString)) { var command = connection.CreateCommand(); command.CommandType = System.Data.CommandType.Text; command.CommandText = @"SELECT LOAN_SERIAL, CLOSE_DATE FROM OPENQUERY(@linkedserver,' SELECT l.Serial AS LOAN_SERIAL, l.CLOSE_DATE FROM core.loan l INNER JOIN core.account la ON la.serial = l.parent_serial INNER JOIN core.person p ON p.serial = la.primary_person_serial INNER JOIN core.ln_type lt ON lt.serial = l.type_serial AND lt.CRED_REP_PORTFOLIO_TYPE = ''M'' INNER JOIN core.share s ON s.serial = l.IMPOUND_SHARE_SERIAL AND s.TYPE_SERIAL IN (SELECT serial FROM core.sh_type st WHERE DESCRIPTION LIKE ''%Escrow%'') INNER JOIN core.account sa ON sa.serial = s.PARENT_SERIAL LIMIT 500 ');".Replace("@linkedserver", LinkedServer); connection.Open(); var reader = command.ExecuteReader(); while (reader.Read()) { LoanData tempObj = new LoanData(Convert.ToInt64(reader["LOAN_SERIAL"]), Convert.ToDateTime(reader["CLOSE_DATE"])); result.Add(tempObj); } } return result; } } public interface ILoanSelector { IEnumerablelt;foobargt; GetFoobars; } class LoanSelector : ILoanSelector { public string ConnectionString { get; } public string LinkedServer { get; private set; } public LoanSelector(string connectionString, string linkedServer) { if (String.IsNullOrWhiteSpace(connectionString)) throw new ArgumentNullException(nameof(connectionString)); if (String.IsNullOrWhiteSpace(linkedServer)) throw new ArgumentNullException(nameof(linkedServer)); ConnectionString = connectionString; LinkedServer = linkedServer; } } }