相关疑难解决方法(0)

为什么C#4.0中的类没有通用方差?

如果我们有接口,为什么我们也没有它用于类?使用它时会产生什么问题?

.net c# generics c#-4.0

55
推荐指数
1
解决办法
4119
查看次数

无法将类型'Task <Derived>'转换为'Task <Interface>'

我有一个委托参数的以下函数,该参数接受一个接口的类型并返回另一个接口的任务.

public void Bar(Func<IMessage, Task<IResult>> func)
{
    throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)

我还有一个带参数的函数作为实例,IMessage并返回一个Task.MessageResult是的实现IMessageIResult分别.

private Task<Result> DoSomething(Message m) { return new Task<Result>(() => new Result()); }
Run Code Online (Sandbox Code Playgroud)

当我将DoSomething传递到Bar时,我收到错误.

Bar(m => DoSomething((Message)m));
// Cannot convert type 'Task<Result>' to 'Task<IResult>'
Run Code Online (Sandbox Code Playgroud)

为什么不会Result隐式转换成IResult

我认为这是协方差的一个问题.但是,在这种情况下,Result工具IResult.我还试图通过创建一个接口并标记TResult为协变来解决协方差问题.

public interface IFoo<TMessage, out TResult>
{
    void Bar(Func<TMessage, Task<TResult>> func);
}
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

方差无效:类型参数'TResult'必须是无效的IFoo<TMessage, TResult>.Bar(Func<TMessage, Task<TResult>>).'TResult'是协变的.

现在我被卡住了.我知道我有协方差的问题,但我不知道如何解决它.有任何想法吗?

编辑:此问题特定于任务.我async await在我的应用程序中实现了这个问题.我遇到了这个通用实现,并添加了一个Task …

c#

16
推荐指数
2
解决办法
2080
查看次数

使用异步编程键入转换错误

谁能告诉我为什么这不起作用?

我有一个看起来像这样的方法:

public virtual async Task<IList<User>> GetAll()
{
    return this.db.Users.Where(model => model.CompanyId.Equals(this.companyId, StringComparison.OrdinalIgnoreCase)).ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译我的代码时,我得到一个错误说明:

错误10无法将类型'System.Threading.Tasks.Task>'隐式转换为'System.Collections.Generic.IList'.存在显式转换(您是否缺少演员?)C:\ Users\Jaymie\Documents\GitHub\Skipstone\Skipstone.Web\Repositories\UserRepository.cs 70 20 Skipstone.Web

但直接在它下面我有这个方法:

public Task<User> FindByIdAsync(string userId)
{
    return this.db.Users.Where(model => model.Id.Equals(userId, StringComparison.OrdinalIgnoreCase)).SingleOrDefaultAsync();
}
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

我想我看不到木头的树木所以需要别人的眼睛来帮助我:)

c# asynchronous entity-framework

1
推荐指数
1
解决办法
1852
查看次数

标签 统计

c# ×3

.net ×1

asynchronous ×1

c#-4.0 ×1

entity-framework ×1

generics ×1