extension-methods 相关问题

扩展方法是某些语言的语言特性,如Swift,Visual Basic.NET和C#。扩展方法使您可以向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。

如何将集合的Swift扩展限制为通用类型?

因为元组在Swift中不可哈希,所以我创建了一个通用结构体Couple,包含两个元素,这些元素组合在一起可以用作字典的键。 struct Couple ] >>>> 实现此目的的一种方法是定义您的Couple类型符合的协议,然后让您的扩展名应用于其键符合该协议的字典,例如: protocol CoupleProtocol { associatedtype U associatedtype V var u: U { get } var v: V { get } } struct Couple<U, V>: CoupleProtocol, Hashable where U: Hashable, V: Hashable { let u: U let v: V init(_ u: U, _ v: V) { self.u = u self.v = v } } extension Dictionary where Key: CoupleProtocol { func exampleConvertToArray() -> [(Key.U, Key.V, Any)] { return map { ($0.u, $0.v, $1) } } } let dictionary: [Couple<Int, Int>: Any] = [ Couple(1, 2): [1, 2], Couple(3, 4): "(3, 4)", Couple(5, 6): (5, 6) ] let array = dictionary.exampleConvertToArray() // array is of type: [(Int, Int, Any)] print(array) // prints: [(3, 4, "(3, 4)"), (1, 2, [1, 2]), (5, 6, (5, 6))] 这是可能的,但是不幸的是,通用约束必须在成员本身而不是整个extension上表达: struct Couple<U: Hashable, V: Hashable>: Hashable { let u: U let v: V init( _ u: U, _ v: V ) { self.u = u self.v = v } } extension Dictionary { func exampleConvertToArray<U, V>() -> [(U, V, Any)] where Key == Couple<U, V> { self.map { (key, value) in (key.u, key.v, value) } } } let input = [ Couple(1, 2): 3, Couple(4, 5): 6, Couple(7, 8): 9, ] let result = input.exampleConvertToArray() print(result)

回答 2 投票 1

Void数组扩展方法不执行任何操作

我编写了一个数组,然后使用扩展方法对其进行追加:private static void Main(string [] args){int [] testInts = {1,2,3,4,5}; testInts.Append(6); Console.WriteLine(“ ...

回答 3 投票 1

Void数组扩展什么都不做

我创建了一个数组,然后使用扩展方法对其进行了追加:private static void Main(string [] args){int [] testInts = {1,2,3,4,5}; testInts.Append(6); ...

回答 3 投票 1

在某些情况下如何修改委托以设置其返回值的属性

我为这个卑鄙的标题表示歉意,我不知道该如何用语言表达。假定以下情形:实现此接口的Holiday结构:public接口IHoliday {HolidayName ...

回答 1 投票 1

静态使用无法识别方法名称,表示该名称在当前上下文中不存在

请注意:我知道已经回答了类似的问题。我花了一段时间才找到该问题/答案,因为它假设我认识到它特别涉及扩展名...

回答 1 投票 -1

foreach为什么找不到我的GetEnumerator扩展方法?

我正在尝试使一些代码更具可读性。例如foreach(表中的var行){...},而不是foreach(表中的DataRow行。行){...}。为此,我创建了一个扩展方法:名称空间...

回答 7 投票 20

TypeScript中数字的扩展方法

我已经读过,可以将扩展方法添加到TypeScript中的类型,但是将其应用于内置类型Number会遇到一些麻烦。这是一些代码:文件A:NumberExtensions.ts ...

回答 1 投票 2

Swift扩展类型约束

XCode 11.2.1 macOS Mojave 10.14.6因此,如果我保留了引用,我将尝试添加从数组中删除对象的功能。遵循互联网的建议,我使我的协议继承自...

回答 1 投票 1

VB.Net泛型约束等效于C#,其中TValue:New()

我正在将C#中的扩展方法转换为VB.Net,但是无法找出对输出设置约束的正确方法。我当前的C#代码正在使用Dictionary,并且...

回答 1 投票 0

从具有Linq扩展名的每个类别中获取最后一个项目

我需要一些帮助(因为我尝试在8岁休息后学习C#)我有两个表,它们之间存在1对多的关系。公共类NewsCategory:IEntity {public int NewsCategoryId {get; ...

回答 1 投票 0

如何在Android Studio中比较带有扩展名和名称的两个图像?

我想知道如何比较两个具有扩展名和名称的图像,并删除重复的文件。基本上,我从外部存储和内部存储中获取完整的视频文件,并且构建了一个用户可以在其中使用的应用...

回答 1 投票 0

为什么LINQ运算符被定义为IEnumerable接口上的扩展方法,并且不属于接口本身? C#

因此,扩展方法用于向类添加功能,而无需修改其当前代码。我读过LINQ运算符是用这种方式定义的。我的问题是,当我们知道我们要LINQ ...

回答 1 投票 1

为什么将LINQ运算符定义为IEnumerable接口上的扩展方法? C#

因此,扩展方法用于添加类的功能,而无需修改其当前代码。我读过LINQ运算符是用这种方式定义的。我的问题是,当我们知道我们要LINQ ...

回答 1 投票 0

填写表格视图节和单元格

我是Swift的新手程序员,正在为自己做一个项目,但是遇到了一个小问题。我有一个带有枚举的文件来填充表。也是表的类中的扩展。我的...

回答 1 投票 1

如何扩展列表列表

如果可能,我想扩展列表的列表。我曾尝试过对此主题进行变体,但没有一个起作用:public static List > ToListsOfmyClass(this IEnumerable 请注意,当我在其他地方使用myClass(p)时,它可以正常工作。 此事实与实际问题完全无关,错误消息应与以下内容相似: Cannot implicitly convert type 'System.Collections.Generic.List<T>' to 'System.Collections.Generic.List<System.Collections.Generic.List<T>>' 正如我们在评论中所说,您可以修改方法以返回List<List<T>>: public static List<List<myClass>> ToListsOfmyClass(this IEnumerable<IEnumerable<OtherClass>> listsOfOtherClass) { return listsOfOtherClass.Select(x => x.Select(p => new myClass(p)).ToList()).ToList(); } 或添加另一个方法,在这里我们将集合展平并返回List<T>: public static List<myClass> ToFlattenedListsOfmyClass(this IEnumerable<IEnumerable<OtherClass>> listsOfOtherClass) { return listsOfOtherClass.SelectMany(x => new myClass(p)).ToList(); } 此外,在许多情况下,例如我们有1000个此类,我会考虑添加通用方法或使用类似AutoMapper的工具。例如: public static List<List<To>> ToListsOfmyClass<From>(this IEnumerable<IEnumerable<From>> listsOfOtherClass) where From : IMyConvertible { return listsOfOtherClass.Select(x => x.Select(p => p.Convert<To>()).ToList()).ToList(); } interface IMyConvertible { ... } 这将需要From从接口.Convert实现方法IMyConvertible

回答 1 投票 1

Dart扩展功能仅当在与它相同的文件中时才可见

假设我创建了两个文件。首先,我创建一个扩展函数,并从另一个文件的类中调用它。文件date_extensions.dart:import'package:date_format / date_format.dart';扩展名...

回答 1 投票 0

通用扩展方法调用非通用重载,并导致无限递归

我在解决方案中使用Microsoft.Extensions.Caching.Abstractions包。该软件包包含IDistributedCache接口。还定义了具有以下签名的扩展方法:...

回答 1 投票 0

扩展方法的可变范围

我有一些有趣的事情,我想更深入地了解。我有一个扩展了int的扩展类:public static class MyExtension {public static void GetProp(this int,...

回答 3 投票 0

Kotlin 1.3.61无法解析函数文字上扩展属性的返回类型

在下面的示例中,我编写了一个简单的装饰器扩展,它捕获异常并在发生任何错误时返回null。问题是num1和num2类型被推断为R?而不是Double ?: val (((...

回答 1 投票 0

如何使用Active Support核心扩展

我已经安装了Active Support 3.0.3,并且已将Rails 3.0.3与Ruby 1.8.7一起安装。当我尝试使用1.week.ago时,出现NoMethodError:来自(irb):2的1:Fixnum未定义方法'week'...

回答 5 投票 95

© www.soinside.com 2019 - 2024. All rights reserved.