gpt4 book ai didi

C# 需要解释新约束 (new T(...))

转载 作者:行者123 更新时间:2023-11-30 21:49:53 25 4
gpt4 key购买 nike

以下代码返回错误:

private void HandleBookLogic<T>() where T : Book , new()
{
LibraryList.Items.Add(new MyItems(new T(int.Parse(copyNumber.Text),
itemName.Text,
DateTime.Parse(TimePrinted.Text),
int.Parse(Guid.Text),
(JournalCategory)Enum.Parse(typeof(JournalCategory),
Category.Text))));
}

'T' cannot provide arguements when creating an instance of Variable Type

我有 3 个通用类:reading\cooking\science

MyItems 是负责 XAML 绑定(bind)到 ListView 的类(现在无关紧要)。 3 个类中的每一个都给我一个错误:

'Reading' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'ItemWindow.HandleBookLogic()

我对 C# 很陌生,我有点“理解”错误但不知道如何处理它们。

感谢您的帮助。

编辑:额外代码:

private void Add_Click(object sender, RoutedEventArgs e)
{

if (Type.Text == "Journal")
{
HandleJournalLogic();
}
else
{
if (Type.Text == "Reading")
HandleBookLogic<Reading>();
else if (Type.Text == "Cooking")
HandleBookLogic<Cooking>();
else
{
HandleBookLogic<Science>();
}
}
InitFields();
}

有人可以修复我的代码以便我学习吗?

最佳答案

new约束仅适用于无参数构造函数。如果您需要一个带参数的构造函数,那么您的调用者需要告诉您如何构造实例。一种常见的方法是您的方法将工厂委托(delegate)作为参数。

例如,您可以使用 Func<int, T>对于采用 int 的构造函数;调用者可以使用 lambda 提供函数。

如果您知道确切的构造函数签名,您还可以使用反射或其他方式 dynamic .不过,这些选项都比通过委托(delegate)要慢得多。根据您的需要,这可能不是问题。

关于C# 需要解释新约束 (new T(...)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36672319/

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