[Mono-dev] Compiler bug with Generics and where constraints
Adar Wesley
adar.wesley at gmail.com
Mon Jul 16 16:43:00 EDT 2007
Hi John,
It seams to me there is a problem with the code. (I don't know if it worked
before)
In
1. protected static T GetBusinessQueryObjectFromReader<T>(IDataReader
reader)
2. 74 where T : BusinessQueryObject, new()
The generic parameter T is contained. However in:
public override T[] GetQueryObjects<T>(string query, params QueryParameter[]
parameters)
T is not constrained.
When you try to call GetBusinessQueryObjectFromReader<T>(IDataReader reader)
from within GetQueryObjects<T> with the same generic parameter you get the
error.
Either add the same constraint on T in the decleration of GetQueryObjects<T>
or remove
the constraint from GetBusinessQueryObjectFromReader<T>.
---
Adar Wesley
On 7/16/07, John Anderson <sontek at gmail.com> wrote:
>
> I tried making a smaller example but couldn't reproduce the error because
> i'm not exactly sure whats causing it.
>
> Heres the code:
> http://dev.orchidesolutions.com/testcode.tar.bz2
>
> if you run 'nant' you'll see the error, its:
>
>
> 1. [nant] /home/sontek/code/personal/devtoo/trunk/src/DataArch.
> DataFactory.MsSqlDatabase/DataArch.DataFactory.MsSqlDatabase.dll .
> build build
> 2. Buildfile: file:
> ///home/sontek/code/personal/devtoo/trunk/src/DataArch.DataFactory.MsSqlDatabase/DataArch.DataFactory.MsSqlDatabase.dll.build
> 3. Target framework: Mono 2.0 Profile
> 4. Target(s ) specified: build
> 5.
> 6.
> 7. build:
> 8.
> 9. [echo] Build Directory is
> <http://www.google.com/search?q=is+msdn.microsoft.com>
> /home/sontek/code/personal/devtoo/trunk/src/DataArch.DataFactory.
> MsSqlDatabase/bin/Release
> 10. [csc] Compiling 3 files to '/home/sontek/code/personal/devtoo/trunk/src/DataArch.DataFactory.MsSqlDatabase/bin/Release/DataArch.DataFactory.MsSqlDatabase.dll'
> .
> 11. [csc]/home/sontek/code/personal/devtoo/trunk/src/DataArch.
> DataFactory. MsSqlDatabase/MsSqlDataObjectFactory.cs(351 ,30):
> warning CS0219: The variable `columnsToUpdate ' is assigned but its
> value is never used
> 12. [csc]
> /home/sontek/code/personal/devtoo/trunk/src/DataArch.DataFactory.MsSqlDatabase/MsSqlDataObjectFactory.cs(479,30):
> error CS0309: The type `T' must be convertible to `DataArch.
> DataFactory.Common.BusinessQueryObject' in order to use it as
> parameter `T' in the generic type or method `DataArch.DataFactory.Common
> .BaseDataObjectFactory.GetBusinessQueryObjectFromReader <T>(System.
> Data.IDataReader)'
> 13. [csc]
> /home/sontek/code/personal/devtoo/trunk/src/DataArch.DataFactory.Common/bin/Release/DataArch.DataFactory.Common.dll
> (Location of the symbol related to previous error)
> 14. [csc]
> /home/sontek/code/personal/devtoo/trunk/src/DataArch.DataFactory.MsSqlDatabase/MsSqlDataObjectFactory.cs(462,9):
> (Location of the symbol related to previous error)
> 15. [csc]
> /home/sontek/code/personal/devtoo/trunk/src/DataArch.DataFactory.MsSqlDatabase/MsSqlDataObjectFactory.cs(479,30):
> error CS0309: The type `T' must be convertible to `DataArch.
> DataFactory.Common.BusinessQueryObject' in order to use it as
> parameter `T' in the generic type or method `DataArch.DataFactory.Common
> .BaseDataObjectFactory.GetBusinessQueryObjectFromReader <T>(System.
> Data.IDataReader)'
> 16. [csc]
> /home/sontek/code/personal/devtoo/trunk/src/DataArch.DataFactory.Common/bin/Release/DataArch.DataFactory.Common.dll
> (Location of the symbol related to previous error)
> 17. [csc]
> /home/sontek/code/personal/devtoo/trunk/src/DataArch.DataFactory.MsSqlDatabase/MsSqlDataObjectFactory.cs(462,9):
> (Location of the symbol related to previous error)
> 18. [csc] Compilation failed: 2 error(s), 1
> warnings
> 19.
> 20. BUILD FAILED - 0 non-fatal error(s), 7 warning(s)
> 21.
> 22.
> /home/sontek/code/personal/devtoo/trunk/src/DataArch.DataFactory.MsSqlDatabase/DataArch.DataFactory.MsSqlDatabase.dll.build(12,10):
> 23. External Program Failed:
> /usr/lib/pkgconfig/../../lib/mono/2.0/gmcs.exe (return code was 1)
> 24.
> 25. Total time: 1 seconds.
> 26.
> 27.
> 28. ======= MsSqlDataObjectFactory =================
> 29.
> 30. public override T[] GetQueryObjects<T>(string query, params
> QueryParameter[] parameters)
> 31. 462 {
> 32. 463 DbCommand command = this.CreateNewCommand();
> 33. 464
> 34. 465 command.CommandText = query;
> 35. 466 foreach (QueryParameter parameter in parameters)
> 36. 467 {
> 37. 468 DbParameter dbParameter =
> command.CreateParameter();
> 38. 469 dbParameter.ParameterName = parameter.Name;
> 39. 470 dbParameter.Value = parameter.Value;
> 40. 471 command.Parameters.Add(dbParameter);
> 41. 472 }
> 42. 473
> 43. 474 List<T> list = new List<T>();
> 44. 475
> 45. 476 ExecuteReader(command,
> 46. 477 delegate(IDataReader reader)
> 47. 478 {
> 48. 479 list.Add(GetBusinessQueryObjectFromReader<T>(reader));
>
> 49. 480 });
> 50. 481
> 51. 482 return list.ToArray();
> 52. 483 }
> 53.
> 54.
> 55.
> 56. ====== BASE ==========
> 57.
> 58. protected static T
> GetBusinessQueryObjectFromReader<T>(IDataReader reader)
> 59. 74 where T : BusinessQueryObject, new()
> 60. 75 {
> 61. 76 QueryDataObject data = new
> QueryDataObject(reader);
> 62. 77 T t = new T();
> 63. 78 t.data = data;
> 64. 79 return t;
> 65. 80 }
> 66.
> 67.
> 68. public abstract T[] GetQueryObjects<T>(string query, params
> QueryParameter[] parameters)
> 69. 91 where T : BusinessQueryObject, new();
>
>
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
>
--
---
Adar Wesley
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20070716/9232b041/attachment.html
More information about the Mono-devel-list
mailing list