Nei*_*ham 5 c# generics azure azure-table-storage
我正在尝试构建一个泛型方法来返回给定Azure表中的分区中的条目.这是它的样子:
public class Table : ITable
{
private CloudStorageAccount storageAccount;
public Table()
{
var storageAccountSettings = ConfigurationManager.ConnectionStrings["AzureWebJobsStorage"].ToString();
storageAccount = CloudStorageAccount.Parse(storageAccountSettings);
}
public async Task<IEnumerable<T>> RetrieveAllInPartition<T>(string tableReference, string partitionKey) where T : ITableEntity
{
var tableClient = storageAccount.CreateCloudTableClient();
var table = tableClient.GetTableReference(tableReference);
var query = new TableQuery<T>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey));
var results = await table.ExecuteQuerySegmentedAsync<T>(query,null);
return results;
}
}
Run Code Online (Sandbox Code Playgroud)
这不编译我得到:
CS0310'T'必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法
'CloudTable.ExecuteQuerySegmentedAsync(TableQuery,TableContinuationToken)'中将其用作参数'TElement '
我有什么想法可以解决这个问题?
tor*_*vin 15
您需要为new()通用参数添加约束:
public async Task<IEnumerable<T>> RetrieveAllInPartition<T>(string tableReference, string partitionKey)
where T : ITableEntity, new()
Run Code Online (Sandbox Code Playgroud)
既然ExecuteQuerySegmentedAsync也有这种约束(可以在文档中看到).
此约束是必需的ExecuteQuerySegmentedAsync,否则它将无法T为您创建实例.请参阅文档以阅读有关new()约束的更多信息.