在Roslyn中调用一个类型?

时间:2014-05-28 15:09:22

标签: vb.net roslyn

这可能与“Roslyn”有关吗? 假设我的INameTypeSymbol实现了界面IFormatProvider 如何调用IFormatProvider

2 个答案:

答案 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