为什么以下代码不起作用?
public void getData<T>(T ConnectionStirng)
{
OleDbConnection con = new OleDbConnection(connectionString); \\compile error
}
答案 0 :(得分:7)
因为connectionString
应该是字符串,而不是T
。
OleDbConnection
类只有两个构造函数:
OleDbConnection() // Empty parameter list
和
OleDbConnection(string connectionString) // takes a connection string
当你通过尝试传入类型为T的对象进行编译时,编译器无法知道它是什么类型(因为它在那时没有在上下文中使用)。
因此,由于T不能保证是一个字符串... OleDbConnection没有与您调用它的参数相匹配的重载。
在这种情况下,由于没有返回值,而connectionString必须是string类型...根本不需要泛型。它可以简单地写成:
public void getData(string connectionString)
除非您尝试返回T类型数据的集合,否则它将如下所示:
public IEnumerable<T> getData<T>(string connectionString)
修改强>
...并且这些都没有说明您的参数名称与您尝试传递给构造函数的内容不匹配,或者您的注释中的斜杠是向后的事实。
答案 1 :(得分:3)
因为 OleDbConnection 需要一个字符串而你已经传递了一个T.
查看代码,您实际上并不需要泛型。当然这已经足够了:
public void getData(string connectionString)
{
OleDbConnection con = new OleDbConnection(connectionString);
}
答案 2 :(得分:0)
因为OleDbConnection的构造函数只接受一个字符串。
答案 3 :(得分:0)
我建议你在代码中解决这七件事:
\\
一起引入,而是与//
; connectionString
拼写错误为ConnectionStirng
; connectionString
应该是string
而不是T
; IDisposable
;所以把它们放在using
区块里。GetData
而不是getData
更像.NET。GetData
,任何合理的人都会希望它返回数据。因此返回类型void
没有意义。不用多说,这应该更接近工作代码:
public TypeOfWhateverDataYouReturn GetData(string connectionString)
{
using (var con = new OleDbConnection(connectionString))
{
// ...
}
}