Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “此时接口名称无效”_C#_Asp.net_Entity Framework - Fatal编程技术网

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

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

我必须返回列表吗?或者我应该如何返回IEnumerable或IQuerable数据类型?

这是var ret=IEnumerable;就是说,这不是有效的C代码

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

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);