ActivatorUtilities.CreateInstance是否支持可空类型构造函数?传null报错求解决
问题原因与解决方法
问题根源
当你传入null作为userGroupId参数时,params object[]会把这个null当成无类型的object值,而ActivatorUtilities.CreateInstance无法自动推断这个null应该对应int?类型,因此找不到匹配的构造函数。而传入1这类有效值时,int类型可以隐式转换为int?,能被正确识别匹配构造函数。
解决方法
方法1:显式指定null的类型
调用Create方法时,将null强制转换为int?,让参数数组明确携带int?类型的null值:
var viewModel = Create<UserGroupEditViewModel>(mediator, (int?)null);
方法2:增加构造函数重载
给UserGroupEditViewModel添加一个仅接收IMediator的构造函数,内部调用原构造函数并传入null:
public UserGroupEditViewModel(IMediator mediator) : this(mediator, null) { }
调用时只需传入mediator即可:
var viewModel = Create<UserGroupEditViewModel>(mediator);
方法3:手动构造参数数组并指定类型
如果需要更灵活的场景,可以手动构造参数数组,确保元素类型正确:
object[] parameters = new object[] { mediator, (int?)null }; var viewModel = Create<UserGroupEditViewModel>(parameters);
内容的提问来源于stack exchange,提问作者Atlass-
相关产品推荐
相关产品推荐

