The VB.NET to C#.NET converter tool from Developer Fusion is awesome! It convert code from VB to C# or vice versa and primarily used by enthusiasts to learn the other language syntax. The tool does a great deal of work in trans-coding. However, not every thing is translated appropriately and you may have to clean up a little bit. Here is an example of issues I faced while using Reflection.
Couple of days back I wrote code in VB.NET as shown below to load an assembly, create an object and set some properties
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
'here is dynamic loading of the libraries
Dim asm As Assembly = Assembly.LoadFile("C:\Inetpub\wwwroot\MySite\Bin\RssReader.dll")
Dim ctrlType As Type = asm.GetType("MySite.CustomControls.RssReader")
Dim control As Object = Activator.CreateInstance(ctrlType)
control.FeedUrl = "http://www.google.com/news?pz=1&ned=us&hl=en&topic=m&output=rss"
Me.Controls.Add(control)
End If
End Sub
When one of my C#.NET based colleague wanted to make use of my code, he used the above VB.NET to C#.NET code and got the below code.
protected void // ERROR: Handles clauses are not supported in C#
Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack) {
//here is dynamic loading of the libraries
Assembly asm = Assembly.LoadFile("C:\\Inetpub\\wwwroot\\MySite\\Bin\\RssReader.dll");
Type ctrlType = asm.GetType("MySite.CustomControls.RssReader");
object control = Activator.CreateInstance(ctrlType);
control.FeedUrl = "http://www.google.com/news?pz=1&ned=us&hl=en&topic=m&output=rss";
this.Controls.Add(control);
}
}
The tool did a great job in conversion process, however, we cracked our head to fix the error
Error 1 'System.Web.UI.Control' does not contain a definition for 'FeedUrl' and no extension method 'FeedUrl' accepting a first argument of type 'System.Web.UI.Control' could be found (are you missing a using directive or an assembly reference?) C:\Inetpub\wwwroot\MySite\Default2.aspx.cs 22 25 http://localhost/MySite/
leading to line of code
control.FeedUrl = "http://www.google.com/news?pz=1&ned=us&hl=en&topic=m&output=rss";
The same piece of code did work in VB.NET but in C#.NET didn’t work until we modified the code as show below
ctrlType.GetProperty("FeedUrl").SetValue(control, @"http://www.google.com/news?pz=1&ned=us&hl=en&topic=m&output=rss", null);
My intention in this post is not to criticize the converter tool, but to cover ‘How to set property of an object created using Reflection?’ in both C#.NET and VB.NET