extension-methods 相关问题

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

如何在服务器中启用.zip扩展名

我想在我的服务器中启用 .zip 扩展名。我在 php.ini 文件中添加了以下代码。但网站将采用默认的 php.ini 文件。 扩展名=php_zip.dll 扩展名=zip.so 如果我上传...

回答 2 投票 0

使用协议而不是结构作为(可选数组)扩展?

说你有 结构螺丝:可编码{ 让 id: 字符串 .. 更多的 } 结构钉:可编码{ 让 id: 字符串 .. 更多的 } 然后 结构部分:可编码{ var 螺丝:[螺丝]? var 指甲:[指甲]? } ...

回答 1 投票 0

ToString 是静态方法吗?

我研究了扩展方法,发现它们是静态的 我想知道 ToString 是静态方法吗? 因为所有扩展方法都是静态的...所以 Tostring 也是静态方法吗?

回答 1 投票 0

“IServiceCollection”不包含“CustomMethod”的定义,并且没有可访问的扩展方法“CustomMethod”

我把代码放在一个单独的扩展方法中,但是ide看不到它。我收到下一个错误“IServiceCollection”不包含“AddSwagger”的定义并且没有可访问的扩展方法“

回答 1 投票 0

如何在 kotlin 中使用 BigDecimal 的扩展函数?

据我了解,Kotlin 对 BigDecimal 实例有运算符重载。 https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/java.math.-big-decimal/ 为什么我不能在我的程序中实际使用它?...

回答 1 投票 0

有没有办法使扩展多态?

我有以下无法更改的java类 接口父... Child1Class 类实现 Parent... Child2Class 类实现 Parent... GrandChild1Class 类扩展 Child1Class ... ... 不...

回答 1 投票 0

为 void 扩展方法创建测试

如何为 void 扩展方法创建测试?我正在使用 XUnit。 我有一个扩展方法,如果某件事为真,它会抛出异常。 公共静态无效IsClosed(此列表 如何为 void 扩展方法创建测试?我正在使用 XUnit。 我有一个扩展方法,如果某件事为真,它会抛出异常。 public static void IsClosed(this List<Contract> contracts) { if (contracts.Any(x => x.Status == Status.Closed) throw new IsClosedException(); } 在测试中我无法举出例子: var sut = contracts.IsClosed(); 我需要模拟合约列表吗? var contracts = Mock<List<Contract>>()); 但是然后呢? contracts.Setup...? 或者 contracts.Invoke...? [Fact] void ShouldThrowIsClosedException() { // Just create a list that you expect to trigger the Exception ... List<Contract> contracts = new() { new() {Status == Status.Closed}}; try { contracts.IsClosed(); Assert.Fail("IsClosedException was expected."); } catch(IsClosedException) { // Expected } } 应该可以解决问题。

回答 1 投票 0

如何在 JavaScript 中编写扩展方法?

我需要用JS写一些扩展方法。我知道如何在 C# 中执行此操作。例子: public static string SayHi(这个对象名称) { 返回“嗨”+姓名+“!”; } 然后通过以下方式调用: 圣...

回答 1 投票 0

Python 中的类扩展就像 Swift 中的那样?

我是Python新手,来自Swift,我想知道以下内容。快速地,如果我想向现有类添加功能,我可以做类似的事情(如书中 e...

回答 3 投票 0

如何比较可空类型?

我有几个地方需要比较 2 个(可为空)值,看看它们是否相同。 我认为框架中应该有一些东西可以支持这一点,但找不到任何东西,所以......

回答 8 投票 0

语法错误:JSON 后位置 3637 处出现意外的非空白字符。当我尝试在 VS Code 中下载任何扩展时出现错误

为什么我无法在 vs code 中下载任何扩展。我尝试过,但它给出了一个错误,并说尝试手动下载。我也尝试过,但无法下载。看到登录通知后

回答 1 投票 0

无法使用.net中的扩展方法配置服务

我编写了一个针对.net6、.net7、.net8的C#包装器库。我想添加 DI 支持,以便用户可以通过调用服务扩展方法 AddMyApp 来配置它。 命名空间 Project1...

回答 1 投票 0

从后台js到内容js的sendMessage不起作用,但内容js到后台js可以工作

content.js chrome.runtime.onMessage.addListener( (请求,发送者,发送响应)=>{ console.log("消息已收到"); console.log(请求、发送者、sendResponse); ...

回答 1 投票 0

如何编写扩展方法来检查空格是否为空

任何人都可以解释一下如何检查空格是否为空。 扩展 StringExtensions on String { bool isNullOrEmpty() => this == null ||是空的; // 检查空格是否为空 } 谢谢

回答 2 投票 0

为什么我的扩展方法没有出现在我的测试类中?

我在 System.Security.Principal.IIdentity 上创建了一个名为 HasContentPermission 的扩展方法: 命名空间 System.Security.Principal { 公共静态类 IdentityExtensions {

回答 4 投票 0

Acumatica 定制,将 UDF 从销售订单复制到装运和发票

我正在寻找一个扩展,允许系统在创建发货时将用户定义的字段从销售订单复制到发货,在创建发票时将用户定义的字段从发货复制到发票 我有

回答 1 投票 0

为什么 F# 中的泛型扩展方法可以编译,但泛型属性或方法却不能编译?

我想写一个简单的记录,它有一个 Min 属性,一个 Max 属性和一个 Step 属性。 .NET 7+ 提供了 System.Numerics.INumber<'T> 接口,因此第一步是 输入 RangeSett...

回答 1 投票 0

如何在Powershell中使用扩展方法?

我有以下代码: 使用系统; 公共静态类 IntEx { /// /// 产生给定数字的幂 /// /// 我有以下代码: using System; public static class IntEx { /// <summary> /// Yields a power of the given number /// </summary> /// <param name="number">The base number</param> /// <param name="powerOf">the power to be applied on te base number</param> /// <returns>Powers applied to the base number</returns> public static IEnumerable<int> ListPowersOf(this int number, int powerOf) { for (var i = number; ; i <<= powerOf) { yield return i; } } } 我已经在Powershell(Windows 8)中加载了dll。我尝试按以下方式使用它: $test = 1.ListPowersOf(2) 应该返回@(1,2,4,8,16...) 相反,它说没有这样的方法。 我尝试了以下方法: [BaseDllNamespace]::ListPowersOf(1,2) 还是什么都没有。我的 IntEx 类中没有命名空间。 如何让它发挥作用 试试这个: [IntEx]::ListPowersOf(1,2) 或 [IntEx] | gm -Static -Type Method 列出可用的静态方法。 您还可以使用反射来获取导出类型的列表,以查看您的类型是否可用: [Reflection.Assembly]::LoadFile('C:path\to.dll')|select -ExpandProperty ExportedTypes 我意识到这不太可能适用于OP,但这个问题是我搜索的第一个结果,所以我将在这里发布我的想法。 我很惊讶这个没有被提及,但 PowerShell 中的 CodeMethods 本质上是针对给定类型的编译扩展方法。它们也很容易编写 - 特别是当您已经有了扩展方法时。 public static class MyStringExtensions { public static string Append(this string source, params char[] characters) { foreach (var c in characters) { source += c; } return source; } // named PSAppend instead of Append. This is just a naming convention I like to use, // but it seems some difference in name is necessary if you're adding the type data // via a types.ps1xml file instead of through the Update-TypeData command public static string PSAppend(PSObject source, params char[] characters) { if (source.BaseObject is string sourceString) { return sourceString.Append(characters); } else throw new PSInvalidOperationException(); } private static string Example() { var myString = "Some Value."; Console.WriteLine(myString.Append(" and then some more.".ToCharArray())); // console output: // Some Value. and then some more. } } 将类型定义加载到 PowerShell 后: $method = [MyStringExtensions].GetMethod('PSAppend') Update-TypeData -TypeName System.String -MemberName Append -MemberType CodeMethod -Value $method # now you can use the method the same way you'd use an extension method in C# PS:\> $myString = "Some Value." PS:\> $myString.Append(" and then some more.") Some value. and then some more. 代码方法的文档不太理想。如果您将其构建到模块中并在清单 (.psd1) 引用的 Types.ps1xml 文件中定义 CodeMethod,则需要在清单的 RequiredAssemblies 中包含定义代码方法的程序集。 (将其包含为 RootModule 是不够的,因为必须在加载类型文件之前加载类型的程序集。) 以下是将此类型定义包含在 Types.ps1xml 文件中的方法: <?xml version="1.0" encoding="utf-8" ?> <Types> <Type> <Name>System.String</Name> <Members> <CodeMethod> <Name>Append</Name> <CodeReference> <TypeName>MyStringExtensions</TypeName> <MethodName>PSAppend</MethodName> </CodeReference> </CodeMethod> </Members> </Type> </Types> 如果您确实希望它阅读起来更接近点语法,您可以在 IntEx 类型上使用隐式或显式转换运算符,并将其用作 POCO 而不是静态扩展。 它可能看起来像这样... $code=@' public class MyExtClass { public string TheStringValue {get; set;} public MyExtClass(string theString){ TheStringValue = theString; } public int NumberOf(string target) { return TheStringValue.Length - TheStringValue.Replace(target, "").Length; } public static implicit operator MyExtClass(string value){ return new MyExtClass(value); } } '@ add-type -TypeDefinition $code $str_eee = "TheTheThe" $numberOfEs = ([MyExtClass]$str_eee).NumberOf("e") if(3 -eq $numberOfEs){Write-Host PASS; exit 0} Write-Host "FAIL"; exit 1 Stroniax 答案的纯 PowerShell 版本 以下类定义了方法 Prefix 和 Suffix,它们旨在与 System.String 类型一起使用,以及方法 AddTypeMember,可用于将任何现有的、正确设计的方法添加到现有的方法中类型。方法的主要设计要求是第一个参数必须是PSObject类型,我相信它需要是static。 class MyExtensions { static [string]Prefix([PSObject]$source, [string]$prefix) { return "$prefix$source" } static [string]Suffix([PSObject]$source, [string]$suffix) { return "$source$suffix" } static [void]AddTypeMember([string]$typeName, [string]$MemberName) { Update-TypeData -TypeName $typeName -MemberName $MemberName -MemberType CodeMethod -Value ([MyExtensions].GetMethod($MemberName)) } } 要向类型添加方法,请使用 AddTypeMember 方法。以下示例命令将方法 System.String 和 Prefix 添加到 Suffix。 [MyExtensions]::AddTypeMember('System.String', 'Prefix') [MyExtensions]::AddTypeMember('System.String', 'Suffix') 正确定义后,您现在可以使用 Prefix 和 Suffix 方法,如下例所示: 'mark'.Prefix('re') 'mark'.Suffix('able') 'mark'.Prefix('re').Suffix('able') 产生以下输出: remark markable remarkable

回答 4 投票 0

kotlin-stdlib 中的模拟扩展函数

我有一种从流媒体端点下载内容的方法。我想编写这个方法的单元测试。我遇到的问题是我需要模拟 kotlin 扩展方法 file.outputStream() 但我不能...

回答 1 投票 0

从数组中一般调用的 swift 静态协议函数

我有一个项目,我想在其中以某种方式按结构进行记录。每个结构都应该有一个返回字符串的静态方法文档。我想为数组编写一个扩展,这样我...

回答 1 投票 0

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