将构造函数参数传递给 C# 中的泛型类型
在 C# 中使用参数化构造函数创建泛型类型的实例可能会带来挑战。 尝试直接实例化通常会导致错误:“创建变量实例时无法提供参数”。这是因为编译器在编译时并不知道具体的构造函数签名。
new()
约束仅允许无参数构造函数。要处理带参数的构造函数,常见的解决方案涉及使用工厂方法(通常表示为委托)。
以下是实现此目标的方法:
不要直接实例化泛型类型,而是将委托(例如 Func
)传递给泛型方法。该委托将充当工厂,负责使用必要的构造函数参数创建对象。
示例:
<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> factoryMethod) { // ... List<T> tabListItems = new List<T>(); foreach (ListItem listItem in listCollection) { tabListItems.Add(factoryMethod(listItem)); } // ... }</code>
此 GetAllItems
方法现在接受 Func<ListItem, T>
委托。 该委托接受 ListItem
作为输入并返回 T
类型的实例。
用法:
<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l)); </code>
在此示例中,lambda 表达式 l => new Foo(l)
用作工厂方法。它需要一个 ListItem
(l
) 并使用它通过 Foo
的构造函数创建一个新的 Foo
对象。 这有效地将 ListItem
参数传递给 Foo
构造函数。
通过将对象创建逻辑与泛型方法本身分离,这种方法允许灵活地实例化泛型类型,即使是那些具有参数化构造函数的类型。
以上是在 C# 中实例化泛型类型时如何将参数传递给构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!