2
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;
    }
}

使用我当前的代码,我得到了上面的异常。

我必须返回一个List<decimal>吗?或者我应该如何返回IEnumerableorIQueriable数据类型?

4

3 回答 3

9

var ret = IEnumerable<decimal>(); 只是无效C#的代码,就是这样。

您可能想要执行以下操作:

var ret = new List<decimal>();

请记住,引用文档的List也来源于此IEnumerable<T>

public class List<T> : IList<T>, ICollection<T>, 
    IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>, 
    IEnumerable

所以代码就像

public IEnumerable<decimal> SomeOtherKeys
{
    get
    {
        var ret = new List<decimal>();                                          
        // do stuff with ret
        return ret;
    }
}

是完全有效的。

于 2013-07-02T14:27:25.320 回答
1

在您的SomeOtherKeys属性获取器中,您必须实例化一个实现IEnumerable<decimal>接口的类。

改成List<decimal>就好了。

var ret = new List<decimal>();
ret.Add(1.0M);
ret.Add(2.0M);
于 2013-07-02T14:27:37.553 回答
1

您创建类实例,但从不创建接口,因为它们只是代码契约,但不能被实例化。

您必须选择IEnumerable<T>更适合您的场景的集合实现并坚持下去。

您的属性SomeOtherKeys可以保留签名,无需更改它,因为使用接口作为返回值是完全有效的,并且有助于减少耦合的良好做法

于 2013-07-02T14:29:24.560 回答