![]() |
1
5
没有办法将方法重载和泛型联系起来:尽管它们看起来相似,但它们却非常不同。具体地说,重载允许您这样做 不同的东西 基于使用的参数类型;而泛型允许您这样做 一模一样 如果您的BuildClause方法被重载,并且每个重载都在做一些不同的事情(不仅仅是所使用的类型不同,在这种情况下,逻辑也确实不同——选择是否添加引号),那么最终,您将不得不说“如果类型是this do this,如果类型是this do this”(我称之为“接通型”)。
另一种方法是避免“开关类型”逻辑,并用多态性替换它。假设你有一个
当然,这也会让您遇到ColFilter是否应该知道引号的问题,但这是一个设计问题,值得再问一个问题:) 我还站在其他海报的立场上说,如果您试图通过将字符串连接在一起来创建SQL语句,您可能应该停止这样做,转而使用更简单、更重要、更安全的参数化查询。 |
![]() |
2
2
函数BuildClause()看起来像什么。 在我看来,您可以创建BuildClause()作为 扩大 方法,您可以将这些值附加在一起。我假设您只想在不同类型上调用.ToString()方法。 |
![]() |
3
2
如果在C#3.0中正确使用泛型,则可以通过隐式类型实现所需的功能(int C#2.0可能需要指定类型)。如果您的BuildClause方法被设置为泛型,则它应该自动采用传入其泛型参数的任何类型:
使用泛型,可以删除ColumnFilter的ColumnType属性。由于它是泛型的,与BuildClause方法一起,您可以通过执行typeof(T)轻松确定类型。 |
![]() |
4
2
铸造是一种运行时操作。
此外,如果您使用了一个像样的sql参数化生成器,它将为您添加单引号。 |
![]() |
5
1
我不明白这个问题。它对我有用。就这么简单吗?我错过了什么?
|
![]() |
6
0
IList的类型必须在编译时已知。根据您想要执行的操作,您可能能够将列表强制转换为IList或IEnumerable(不带泛型),然后迭代对象 |
![]() |
Jiji · 将简单对象强制转换为简单的通用接口 7 年前 |
![]() |
tobeypeters · 反射铸造 7 年前 |
![]() |
Alex · 是否改为存储字符串的整数的通用ArrayList? 7 年前 |
![]() |
Kai · 如何在C#中转换会话中存储的词典? 7 年前 |
![]() |
Ján ЯabÄan · 布尔值到双精度的快速转换方法 7 年前 |