我正在尝试构建一个通用方法来返回给定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;
}
}
这个不编译,我得到:
CS0310 'T'必须是具有公共无参数的非抽象类型构造函数,以便将其用作泛型中的参数' element '类型或方法
"CloudTable。ExecuteQuerySegmentedAsync (TableQueryTableContinuationToken)
我该如何解决这个问题?
您需要将new()
约束添加到您的泛型参数:
public async Task<IEnumerable<T>> RetrieveAllInPartition<T>(string tableReference, string partitionKey)
where T : ITableEntity, new()
因为ExecuteQuerySegmentedAsync
也有这个约束(可以在文档中看到)。
ExecuteQuerySegmentedAsync
需要此约束,否则它将无法为您创建T
的实例。有关new()
约束的更多信息,请参考文档