我有一个类型(人类),我想知道我是否可以执行 System.Activator.CreateInstance(Of Human)()
。所以基本上我想检查 Human 是否有一个公共(public)无参数构造函数/或一个带有可选参数的公共(public)构造函数,从而可以在不提供任何参数的情况下调用 New Human
。
是否可以预先检查 System.Activator.CreateInstance(Of T)
是否会失败? (我的意思是除了在 Try Catch 中包装语句 System.Activator.CreateInstance(Of Human)()
当然..)
我已经试过了,但它不起作用:
Option Strict On : Option Explicit On
Module Test
Public Class Human
Public Sub New(Optional ByVal a As Integer = 1)
End Sub
End Class
Public Sub Main()
Dim c = GetType(Human).GetConstructor(System.Type.EmptyTypes)
MsgBox(c Is Nothing)
End Sub
End Module
最佳答案
检查构造函数是否为空或所有参数都是可选的:
var hasEmptyOrDefaultConstr =
typeof(Human).GetConstructor(Type.EmptyTypes) != null ||
typeof(Human).GetConstructors(BindingFlags.Instance | BindingFlags.Public)
.Any (x => x.GetParameters().All (p => p.IsOptional));
关于c# - 事先检查 `System.Activator.CreateInstance(Of T)` 是否会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6113970/