我的队友的以下代码有效:

 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);

能不能简化一下。这里唯一的类型变量是“帐户”,我想知道 T 和 V 类型是否可以合并为一个,因为 V 仅取决于 T。

最佳答案

是的

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 推断参数类型。

关于c# - 这个 C# 通用代码可以简化并且只传入一种类型吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8573791/

10-13 06:47