C# “此时接口名称无效”
用我当前的代码,我得到了上面的异常 我必须返回列表吗?或者我应该如何返回IEnumerable或IQuerable数据类型?这是var ret=IEnumerable;就是说,这不是有效的C代码 您可能需要执行以下操作:C# “此时接口名称无效”,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,用我当前的代码,我得到了上面的异常 我必须返回列表吗?或者我应该如何返回IEnumerable或IQuerable数据类型?这是var ret=IEnumerable;就是说,这不是有效的C代码 您可能需要执行以下操作: public IEnumerable<decimal> SomeKeys { get { return dbContext.SomeTable.Select(x=>x.Key); } } public IEnumera
public IEnumerable<decimal> SomeKeys
{
get
{
return dbContext.SomeTable.Select(x=>x.Key);
}
}
public IEnumerable<decimal> SomeOtherKeys
{
get
{
var ret = IEnumerable<decimal>(); // interface name is not
// valid as this point
// do stuff with ret
return ret;
}
}
请记住,引用文档也是从IEnumerable派生的
代码是这样的
public class List<T> : IList<T>, ICollection<T>,
IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>,
IEnumerable
是完全有效的。在SomeOtherKeys属性getter中,必须实例化一个实现IEnumerable接口的类
换成列表就可以了
public IEnumerable<decimal> SomeOtherKeys
{
get
{
var ret = new List<decimal>();
// do stuff with ret
return ret;
}
}
您创建类实例,但从不创建接口,因为它们只是代码契约,但无法实例化 您必须选择更适合您的场景的实现IEnumerable的集合,并坚持使用它
您的属性SomeOtherKey可以保留签名,无需更改,因为使用接口作为返回值是完全有效的,并且是一种有助于减少耦合的良好做法它们是接口,而不是真正的数据类型。我认为一个关于接口的基本教程可以清楚地说明这个问题:c
public IEnumerable<decimal> SomeOtherKeys
{
get
{
var ret = new List<decimal>();
// do stuff with ret
return ret;
}
}
var ret = new List<decimal>();
ret.Add(1.0M);
ret.Add(2.0M);