这可能与“Roslyn”有关吗?
假设我的INameTypeSymbol
实现了界面IFormatProvider
如何调用IFormatProvider
?
答案 0 :(得分:1)
罗斯林是关于检查&编译代码,而不是运行它。
您需要编译类型(如果尚未编译),加载程序集,然后使用Reflection为其查找System.Type
对象并创建实例。
答案 1 :(得分:0)
我设法找到了一种方法,因为编译器已经知道了类型。
Dim FullyNamed = ArgTypes(0).ToDisplayString(
New SymbolDisplayFormat(
typeQualificationStyle:= SymbolDisplayTypeQualificationStyle.
NameAndContainingTypesAndNamespaces ) )
Dim GottenType = Type.GetType(FullyNamed, False, True)
Dim Obj = GottenType.GetConstructors()(0).Invoke({Nothing})
我认为它需要使它成为一个适用于任何构造函数的函数。
Public Module Exts
<Runtime.CompilerServices.Extension>
Public Function BuildMeOne( tt As Type) As Object
Dim constructors = tt.GetConstructors()
For Each xon In constructors
Try
dim obj=xon.Invoke( Enumerable.Repeat(Of Object)(Nothing, xon.GetParameters().count).ToArray)
Return obj
Catch ex As Exception
End Try
Next
Throw New Exception
End Function
End Module