这个c#泛型代码可以简化,只传递一种类型吗?

本文关键字:一种 类型 代码 泛型 这个 | 更新日期: 2023-09-27 18:18:27

以下代码来自我的队友作品:

 public T Get<T, V>(V repo, string pk, string rk)
            where T : Microsoft.WindowsAzure.StorageClient.TableServiceEntity
            where V : IAzureTable<T>
        {
            try
            {
                var item = repo.GetPkRk(pk, rk);
                if (item == null) throw new Exception(); return (T)item;
            }
            catch (Exception ex)
            {
                _ex.Errors.Add("", typeof(T).Name + rk + " does not exist");
                throw _ex;
            }
        }

调用代码:

var account = base.Get<Account, IAzureTable<Account>>(_accountRepository, pk, rk);

可以简化吗?这里唯一的类型变量是"Account",我想知道T和V类型是否可以合并为一个,因为V只依赖于T。

这个c#泛型代码可以简化,只传递一种类型吗?

由于V出现的唯一地方是在签名中,我认为您可以将其更改为:

public T Get<T>(IAzureTable<T> repo, string pk, string rk)
        where T : Microsoft.WindowsAzure.StorageClient.TableServiceEntity

但是我没有现成的示例代码来测试这个

public T Get<T>(IAzureTable<T> repo, string pk, string rk)
        where T : Microsoft.WindowsAzure.StorageClient.TableServiceEntity

public T Get<T>(IAzureTable<T> repo, string pk, string rk)
{
    ...
}
然后

var account = base.Get<Account>(_accountRepository, pk, rk);

你甚至可以用

var account = base.Get(_accountRepository, pk, rk);
如果编译器可以从_accountRepository中推断出参数类型