【发布时间】:2016-12-07 19:04:27
【问题描述】:
我已经找到了一些关于这个主题的信息,但都是关于典型类的——我不知道如何将下面的类转换为通用版本。
我继承了现有代码,该代码使用 SqlHashSet 类为数据库的参数设置整数值。它看起来像这样:
namespace Services
{
public class SqlHashSet : HashSet<int>, IEnumerable<SqlDataRecord>
{
SqlDataRecord ret = new SqlDataRecord(new SqlMetaData("value", SqlDbType.Int));
foreach (var data in this)
{
ret.SetValue(0, data);
yield return ret;
}
}
}
由于代码的结构,我必须使用 SqlHashSet。我的问题是我需要一个 strings 的 SqlHashSet。
我在想也许我可以在类声明中使用HashSet<T>,但我还必须检查值是 SqlDbType.int 还是 SqlDbType.VarChar 类型
所以,我的问题是:
我可以这样做吗?
我需要做什么才能使用
<T>?也许没有第三个问题;也许我可以在使用泛型类型后逐步执行代码并弄清楚如何确定 SqlDbType 以将值设置为。
【问题讨论】:
-
Can I do this?foreach 循环,yields 结果必须是方法体的一部分,它不能单独存在于类体中。 -
What do I need to do to use <T>? -
您可以采取简单的方法,使用两个通用参数,一个用于
HashSet,一个用于SqlDbType。你的班级看起来像SqlHashSet<TManaged, TSql>。或者,重写代码以不使用此SqlHashSet并坚持使用库类型。 -
这个类中
T是如何使用的?是否只有HashSet<T>基类需要? -
@Igor 没错,但它必须作为普通参数传递给构造函数。