gpt4 book ai didi

c# - 如何在 C# 中使用参数化构造函数创建泛型类型参数的实例

转载 作者:IT王子 更新时间:2023-10-29 04:34:38 25 4
gpt4 key购买 nike

我正在尝试编写一个辅助方法,该方法将记录一条消息并使用相同的消息抛出指定类型的异常。我有以下内容:

private void LogAndThrow<TException>(string message, params object[] args) where TException : Exception, new()
{
message = string.Format(message, args);
Logger.Error(message);
throw new TException(message);
}

在添加 new() 约束之前,编译器提示没有它我无法实例化 TException。现在我收到的错误消息是“在创建类型参数‘TException’的实例时无法提供参数”。我尝试使用无参数构造函数创建实例,然后设置 Message 属性,但它是只读的。

这是语言的限制还是有我不知道的解决方案?也许我可以使用反射,但这对于这样一个简单的任务来说太过分了。 (而且很丑,但这是个人意见。)

最佳答案

您可以使用 Activator.CreateInstance() (允许您传入参数)创建 TException 的实例。然后,您可以抛出创建的 TException

例如:

private void LogAndThrow<TException>(string message, params object[] args) where TException : Exception, new()
{
message = string.Format(message, args);
Logger.Error(message);

TException exception = (TException)Activator.CreateInstance(typeof(TException), message);
throw exception;
}

关于c# - 如何在 C# 中使用参数化构造函数创建泛型类型参数的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4411109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com