C# 如何使用泛型返回类型从方法返回具体类的实例
我有一个从我的应用程序调用的方法。方法是从C# 如何使用泛型返回类型从方法返回具体类的实例,c#,.net,C#,.net,我有一个从我的应用程序调用的方法。方法是从Google.api.Util.Store.IDataStore实现的。我想从那个方法返回令牌,但我不知道如何返回。Token是类类型TokenResponse。如何从这样的方法返回类TokenResponse public Task<T> GetAsync<T>(string key) { //TokenResponse token = new TokenResponse(); //token.RefreshToken
Google.api.Util.Store.IDataStore
实现的。我想从那个方法返回令牌,但我不知道如何返回。Token是类类型TokenResponse。如何从这样的方法返回类TokenResponse
public Task<T> GetAsync<T>(string key)
{
//TokenResponse token = new TokenResponse();
//token.RefreshToken = @"rere545454545";
//return token; -- I would like to return this, but it throws error
return Task.FromResult<T>(default); //that works, but not much help out of it
}
抛出和错误
无法创建变量类型TokenResponse的实例,因为
它没有new()约束
解决问题的最简单方法是使用下一种方法:
public Task<T> GetAsync<T>(string key)
{
TokenResponse t = new TokenResponse();
// ...
return Task.FromResult((T) ((object) t));
}
公共任务GetAsync(字符串键)
{
TokenResponse t=新的TokenResponse();
// ...
返回Task.FromResult((T)((object)T));
}
您应该保证总是使用类型参数
T=TokenResponse
调用方法GetAsync
。否则,此代码将抛出InvalidCastException
从方法中删除泛型参数。您想返回一个Task
如果我更改方法的签名,如Task GetAsync(字符串键)将此Task GetAsync(字符串键)
更改为ThisTask GetAsync(字符串键)
谢谢@MichaelRandall,这一切都有效。但问题是,IDataStore应该实现这种方法。如果我这样做,我会出错。
public Task<T> GetAsync<T>(string key)
{
TokenResponse t = new TokenResponse();
// ...
return Task.FromResult((T) ((object) t));
}