【问题标题】:Getting Inconsistent Accessibility error on public interface在公共界面上出现不一致的可访问性错误
【发布时间】:2021-11-13 07:59:23
【问题描述】:

好的,所以我知道这是一个常见的问题,但答案似乎总是将接口设置为公开。好吧,我的界面是公开的,我收到了这个错误

错误 CS0050 可访问性不一致:返回类型 'IEnumerable 的可访问性低于方法 'ILoanSelector.SelectSerials()'

这是我的代码。

namespace EscrowAnalysis
{
    public interface ILoanSelector
    {
        IEnumerable<LoanData> 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 IEnumerable<LoanData> SelectSerials()
        {
            var result = new List<LoanData>();
            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。

【问题讨论】:

  • 我猜你的LoanData 类是内部的??
  • 这看起来让我很困惑。您有一个带有 IEnumerable 的 ILoanSelector 接口,然后将它与 LoanSelector 结合,同时将 Public IEnumerable SelectSerial 嵌入到同一个类中。那不应该在它自己的类中吗?
  • 确保LoanData 类也被声明为public

标签: c#


【解决方案1】:

在这里走投无路。不确定您要做什么。但我认为你想要这样的东西:

namespace EscrowAnalysis
{
public class foobar
{
    public IEnumerable<LoanData> SelectSerials()
    {
        var result = new List<LoanData>();
        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
{
    IEnumerable<foobar> 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;
    }

}
}

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多