Generate Extension Methods using System.CodeDom
Asked Answered
G

2

7

Has anyone ever tried to generate extension methods using System.CodeDom under .NET 4.0? There doesn't seem to be any way to specify a CodeMemberMethod or CodeParameterDeclarationExpression as being an extension method/parameter.

If this isn't possible, are there any good workarounds?

Thanks

Gobang answered 15/5, 2011 at 21:10 Comment(0)
U
7

Apparently CodeDom isn't able to generate the correct code for the first parameter of an extension method, but you can cheat it like this:

var param = new CodeParameterDeclarationExpression("this string", "s");

It will blissfully ignore the fact that "this string" is not a valid type...

Uniocular answered 15/5, 2011 at 22:23 Comment(1)
This actually fits my needs ridiculously well. I am using extension methods for syntactic reasons, nothing more, so no members on the "this" parameter will ever be accessed, so I don't even have to worry about any type checking in System.CodeDom... Thanks for the ideaGobang
P
0

See Extension Attribute

Quote:

In Visual Basic, you should use this attribute to create an extension method. For more information, see Extension Methods (Visual Basic).

In C#, you do not need to use this attribute; you should use the this (C# Reference) modifier for the first parameter to create an extension method. The compiler automatically emits ExtensionAttribute for extension methods. For more information, see Extension Methods (C# Programming Guide).

If you are writing a compiler that supports extension methods, your compiler should emit this attribute on each extension method and on each class and assembly that contains one or more extension methods.

Pocketbook answered 15/5, 2011 at 21:35 Comment(3)
It will just apply the ExtensionAttribute to the method, which is an error in C#... the compiler says to use the this modifier insteadUniocular
Are you trying to use the compiler, or reflection emit? I may have misunderstood your question, if you are referring to some kind of in-IDE script/addin; That said, you might be consider using Compiler As A Service, anywayPocketbook
I am using System.CodeDom, which is a library included in the standard .NET framework for generating code files (or assemblies).Gobang

© 2022 - 2024 — McMap. All rights reserved.