使用新的c#7元组语法,是否可以指定一个带有元组作为参数的lambda并在lambda中使用解压缩的值?
例:
var list = new List<(int,int)>();
Run Code Online (Sandbox Code Playgroud)
在lambda中使用元组的常规方法:
list.Select(value => value.Item1*2 + value.Item2/2);
Run Code Online (Sandbox Code Playgroud)
我期待一些新的糖可以避免.Item1 .Item2,例如:
list.Select((x,y) => x*2 + y/2);
Run Code Online (Sandbox Code Playgroud)
最后一行不起作用,因为它被视为lambda的两个参数.我不确定是否有办法实际做到这一点.
编辑:
我尝试在lambda定义中进行双重注射,但它不起作用((x,y)) => ...,并且尝试可能是愚蠢的,但是双括号实际上在这里工作:
list.Add((1,2));
Run Code Online (Sandbox Code Playgroud)
另外,我的问题并不是关于避免丑陋的默认名称.Item .Item2,而是关于实际解压缩lambda中的元组(也许是为什么它没有实现或不可能).如果您来这里寻找默认名称的解决方案,请阅读Sergey Berezovskiy的回答.
编辑2:
刚想到一个更通用的用例:是否有可能(或者为什么不)将"解构"传递给方法的元组?像这样:
void Foo((int,int)(x,y)) { x+y; }
Run Code Online (Sandbox Code Playgroud)
而不是这个:
void Foo((int x,int y) value) { value.x+value.y }
Run Code Online (Sandbox Code Playgroud) 我正在为我的组织开发内部图书馆。我需要引用通常“属于”网络应用程序的某些类型,例如。提供一些扩展:
WebApplicationOptionsHttpContext如果我使用<Project Sdk="Microsoft.NET.Sdk">,我没有对这些类型的引用,也找不到包含它们的任何 nuget 包。如果我使用<Project Sdk="Microsoft.NET.Sdk.Web">,我无法构建我的类库,因为它被视为应用程序并且必须指定入口点。
所以,我的一般问题是:为 ASP.NET Core 6 编写库的正确方法是什么?
回到 core 2.x 时代,所有东西都有软件包,比如Microsoft.AspNetCore.Http.Abstractions. 它们都停留在版本上2.2.0,我认为它们现在无法使用?
我有带VS项目的Windows机器,我使用Visual Studio和Cygwin环境中的工具,包括Git.有时我在编辑后会在文件中得到不同的行结尾.我想要简单的解决方案来检查文件的行结束一致性,然后再去回购.core.safecrlf我认为Git 是正确的.现在我有一个奇怪的行为:
文件A和B以下参数:
$file A
A: HTML document, UTF-8 Unicode text, with CRLF line terminators
$file B
B: HTML document, UTF-8 Unicode (with BOM) text, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)
文件A已经在repo中,文件B是新的.注意,两者都有CRLF行结尾.现在尝试上演他们,core.safecrlf是true.
$git add A # ok
$git add B # fails
fatal: CRLF would be replaced by LF in B.
Run Code Online (Sandbox Code Playgroud)
我core.safecrlf正确使用?或者我可能需要编写钩子来检查文件?
笔记:
core.autocrlfGit中有相关功能,将其添加到标签中(Stackoverflow没有标签core.safecrlf)编辑#1:签出core.autocrlf- 它是input.改为false,现在我可以添加两个文件.为什么?
我知道有两种方法可以调用浏览器的"打印"对话框(我当然使用了搜索):
他们之间有什么区别?跨浏览器支持?论文,文档或标准?哪个更正确?
另一个问题:打印给定网页部分的最直接方式是什么?我知道我们可以创建新窗口或iframe来调用上面的两种打印方法中的任何一种.哪一个陷阱较少?
我已经开始使用Awesome WM,并且发现mod+R在当前布局不是美国时,例如RU,它忽略了"运行"小部件()中的输入很烦人.此外,它忽略了任何输入(鼠标点击,键盘 - 甚至不是特定于布局的键,如Esc!)在其启动器/主菜单和"客户列表"中等等.我正在使用Arch Linux,并且~/.xinitrc有以下行:
setxkbmap -layout "us, ru" -option "grp:caps_toggle, grp_led:caps"
Run Code Online (Sandbox Code Playgroud)
Awesome的rc.lua默认配置既没有布局,也没有特定于Capslock的东西,但我试图隔离问题并从我的xinitrc中删除了capslock toggle选项.这根本没有帮助.
xev 输出显示当我切换布局(带有大写字母)时,只有事情发生变化才是'状态':
- 鼠标左键单击(当前布局:美国,一切正常) -
LeaveNotify event, serial 33, synthetic NO, window 0x1600001,
root 0x95, subw 0x0, time 13419931, (151,498), root:(835,518),
mode NotifyGrab, detail NotifyAncestor, same_screen YES,
focus YES, state 256
EnterNotify event, serial 33, synthetic NO, window 0x1600001,
root 0x95, subw 0x0, time 13419931, (151,498), root:(835,518),
mode NotifyUngrab, detail NotifyAncestor, same_screen …Run Code Online (Sandbox Code Playgroud) 我有一个使用程序集的 .NET Core 项目Microsoft.Xrm.Client。它在 Linux 上运行良好,除了一种特定情况,即 Xrm.Client 想要创建顺序 GUID。它依赖于 DLLImport 和UuidCreateSequential来自本机 Windows 的调用Rpcrt4.dll. 当然,在 Linux 上它会崩溃。
相关(反编译)代码是:
namespace Microsoft.Xrm.Sdk.Client
{
[SecurityCritical]
internal static class NativeMethods
{
[SecurityCritical]
[DllImport("Rpcrt4", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public static extern long UuidCreateSequential(ref Guid ptrGuid);
}
}
Run Code Online (Sandbox Code Playgroud)
我不控制这段代码,我认为我的选择是:
NativeMethods.UuidCreateSequential(我自己在任何地方提供 GUID)。缺点是这对于用户代码来说不太方便。NativeMethods.UuidCreateSequential为 .NET 实现,例如 使用和谐。StdCall. 或者可能只是因为反编译器。哪种解决方案更好并且有效?人们会如何处理它呢?