gpt4 book ai didi

c# - 如何用 where 指定泛型?

转载 作者:太空狗 更新时间:2023-10-29 19:57:25 25 4
gpt4 key购买 nike

我试图指定这个泛型,但出现多个错误:

    public void AddOrUpdate(T item, V repo) where T: IAuditableTable, V: IAzureTable<TableServiceEntity>
{
try
{
V.AddOrUpdate(item);
}
catch (Exception ex)
{
_ex.Errors.Add("", "Error when adding account");
throw _ex;
}
}

例如第一行V后面的“:”会报错:

Error   3   ; expected

加上其他错误:

Error   2   Constraints are not allowed on non-generic declarations 
Error 6 Invalid token ')' in class, struct, or interface member declaration
Error 5 Invalid token '(' in class, struct, or interface member declaration
Error 7 A namespace cannot directly contain members such as fields or methods
Error 8 Type or namespace definition, or end-of-file expected

我的通用编码有什么明显的错误吗?

更新:

我做了修改,代码现在看起来像这样:

public void AddOrUpdate<T, V>(T item, V repo)
where T : Microsoft.WindowsAzure.StorageClient.TableServiceEntity
where V : IAzureTable<TableServiceEntity>
{
try
{
repo.AddOrUpdate(item);
}
catch (Exception ex)
{
_ex.Errors.Add("", "Error when adding account");
throw _ex;
}
}

从派生类中调用它:

    public void AddOrUpdate(Account account)
{
base.AddOrUpdate<Account, IAzureTable<Account>>(account, _accountRepository);
}

最佳答案

V 需要第二个 where:

public void AddOrUpdate<T, V>(T item, V repo)
where T : IAuditableTable
where V : IAzureTable<TableServiceEntity>

每个 where 都列出了单个类型参数的约束。请注意,我也已将类型参数添加到方法中 - 否则编译器会将 TV 视为普通类型,并且不理解您为什么试图约束他们。

关于c# - 如何用 where 指定泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8559289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com