如何使用where指定泛型
本文关键字:泛型 where 何使用 | 更新日期: 2023-09-27 18:18:28
我试图指定这个通用的,但我得到多个错误:
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
列出单个类型参数的约束条件。请注意,我已经将类型参数添加到方法中,否则编译器将寻找T
和V
作为正常类型,并且不会理解为什么要尝试约束它们。
似乎有些地方不对。
1)正如@Jon所说,你需要单独的where
条款
public void AddOrUpdate<T,V>(T item, V repo) where ....
3)您正在尝试调用类型V
上的方法,而不是该类型repo
的实例。即:
V.AddOrUpdate(item);
应该repo.AddOrUpdate(item);