已声明公共接口仍出现CS0050不一致可访问性错误如何解决
问题根因
CS0050 错误的核心规则是:public 级别的方法的返回值类型可访问性不能低于方法本身的可访问性。
你定义的ILoanSelector接口为public修饰,接口内的SelectSerials()方法默认继承public访问级别,但方法返回的IEnumerable<LoanData>中的LoanData类没有显式指定访问修饰符。C# 中非嵌套类默认访问级别为internal,可访问性低于public,因此触发报错。
如果报错信息中的LoadData不是笔误,同理是LoadData类的可访问性不足导致的问题。
解决方案
找到LoanData(或报错提到的LoadData)类的定义,为其添加public访问修饰符即可:
// 修改前的默认定义 class LoanData { public long LoanSerial { get; } public DateTime CloseDate { get; } public LoanData(long loanSerial, DateTime closeDate) { LoanSerial = loanSerial; CloseDate = closeDate; } } // 修改后 public class LoanData { public long LoanSerial { get; } public DateTime CloseDate { get; } public LoanData(long loanSerial, DateTime closeDate) { LoanSerial = loanSerial; CloseDate = closeDate; } }
如果后续需要在程序集外访问LoanSelector类,也可以为其添加public修饰符,避免出现同类访问性错误。
额外优化建议
你当前代码中直接通过字符串替换插入LinkedServer参数的写法存在SQL注入风险,建议对LinkedServer的输入值做严格的白名单校验,避免安全隐患。
内容的提问来源于stack exchange,提问作者FulcrumFlex17
相关产品推荐
相关产品推荐

