小编Gei*_*erg的帖子

是否可以在TypeScript中推断Record的键?

我正在使用JSS,并且想style用强类型键和值定义一个对象,而又没有两次定义键。

第一次尝试:

const style: Record<string, CSSProperties> = {
  root: {
    background: 'red'
  },
  title: {
    fontWeight: 'bold'
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

Now style不是强类型的,因此编译器在访问时不会发出警告style.nonExistingKey

第二次尝试:

如果我像这样明确指定键:

const style: Record<'root' | 'title' | ... , CSSProperties> = {
  root: {
    background: 'red'
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后我得到一个强类型的记录,即style.nonExistingKey会抛出一个错误。但是,此方法需要复制记录键,因为必须将它们显式添加为通用参数。

第三次尝试:

我可以使用以下代码在事实之后创建一个强类型的记录:

const styleObj = {
  root: {
    background: 'red'
  },
  title: {
    fontWeight: 'bold'
  },
  ...
}

const style = styleObj as Record<keyof typeof styleObj, CSSProperties>
Run Code Online (Sandbox Code Playgroud)

但是,然后我丢失 …

typescript

6
推荐指数
2
解决办法
1287
查看次数

如何为二维LINQ操作创建高效的数据结构?

问题:我有2个类型的对象,让他们打电话BuildingImprovement.大约有30个Improvement实例,而可能有1-1000 个实例Building.对于的每个组合BuildingImprovement,我不得不执行一些繁重的计算,并且将结果存储在一个Result对象.

两个BuildingS和ImprovementS可通过一个整数ID来表示.

然后我需要能够:

  • 访问Result给定BuildingImprovement有效(编辑:请参阅下面的评论)
  • 对给定的Result所有Improvements 执行聚合Building,如.Sum()和.Average()
  • 对于给定的Result所有Buildings,对s 执行相同的聚合Improvement

这将发生在Web服务器后端,因此内存可能是一个问题,但速度是最重要的.

思念至今:

  1. 使用Dictionary<Tuple<int, int>, Result>with <BuildingID, ImprovementID>作为键.这应该给我快速插入和单个查找,但我关心.Where().Sum()性能.
  2. 使用二维数组,其中一个维度用于BuildingIDs,一个用于ImprovementIDs,以及Resultas值.另外,构建两个Dictionary<int, int>BuildingIDs和ImprovementIDs 映射到它们各自的数组行/列索引.这可能意味着最多1000+ Dictionarys,这会是一个问题吗?
  3. 用一个List<Tuple<int, int, Result>> …

.net c# linq performance

5
推荐指数
1
解决办法
954
查看次数

如何在不编译 DLL 的情况下在 Android 中使用 MvvmCross 插件?

我在 Android 项目中使用我自己的 MvvmCross 插件时遇到问题,因为它PluginLoader似乎期望.Droid.dll它所在的确切命名空间。

假设我有三个具有此文件夹和命名空间结构的项目:

MyApp.Core:
    Plugins/Settings/ISettings.cs
    Plugins/Settings/PluginLoader.cs
MyApp.Droid:
    Plugins/Settings/Settings.cs
    Plugins/Settings/Plugin.cs
    Bootstrap/SettingsPluginBootstrap.cs
MyApp.Touch:
    Plugins/Settings/Settings.cs
    Plugins/Settings/Plugin.cs
    Bootstrap/SettingsPluginBootstrap.cs
Run Code Online (Sandbox Code Playgroud)

iOS 项目按预期工作,并没有问题地找到插件。

另一方面,Droid 项目失败并出现异常: Could not load file or assembly 'MyApp.Plugins.Settings.Droid.dll' or one of its dependencies.

如果我改变的命名空间PluginLoader,从MyApp.Core.Plugins.Settings简单MyApp的插件工程; 我猜它会寻找MyApp.dll并找到它。但是,如果我的应用程序中有多个插件,它们应该都有自己的命名空间,它们不能都在MyApp命名空间中。

目前我发现的唯一解决方法是为我创建的每个插件创建一个单独的项目,尽管这感觉有点不必要。

为什么在安卓PluginLoader上找<PluginLoader namespace>.Droid.dll文件,PluginLoader在iOS上找插件没问题?

mvvmcross xamarin

5
推荐指数
1
解决办法
1848
查看次数

如何检查MSBuild是否正在使用.NET Core?

Scripty.MsBuild用来在ASP.NET Core项目中生成一些文件。从VS2017构建时,目标运行成功,但是通过构建时dotnet,出现错误:

Scripty.MsBuild.targets(31,5): error MSB4062: The "ScriptyTask" task could not be loaded from the assembly C:\Users\geirsagberg\.nuget\packages\scripty.msbuild\0.7.4\build\\..\tools\Scripty.MsBuild.dll. Could not load file or assembly 'Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.
Run Code Online (Sandbox Code Playgroud)

我目前的解决方法是禁用Scripty.MsBuildRelease配置:

<PackageReference Include="Scripty.MsBuild" Version="0.7.4" Condition="'$(Configuration)'=='Debug'" />
Run Code Online (Sandbox Code Playgroud)

这使我可以在调试模式下从VS进行构建,dotnet并在构建服务器上进行构建。

但是,我仍然希望能够dotnet run …

msbuild .net-core

5
推荐指数
1
解决办法
827
查看次数

如何使用 OpenIdConnectMiddleware 设置受众?

OpenIdConnectMiddleware在 ASP.NET Core 2.0 应用程序中使用 Auth0 作为身份验证。

我已经按照这个指南通过Auth0实现了身份验证,并且可以成功登录。

现在我想使用检索到的访问令牌来访问单独的 API;为此,我需要audience在使用 Auth0 授权时包含一个参数,如此处所述

由于 OpenID Connect 中间件使用 Auth0 处理授权,并且 没有Audience设置OpenIdConnectOptions,我如何指定audience应该传递给/authorize端点的参数?

c# openid-connect auth0 asp.net-core

4
推荐指数
1
解决办法
861
查看次数

在ReSharper 7中,是否可以扩展字符串的语法高亮?

ReSharper有一个奇特的功能,突出显示格式变量,例如string.Format():

的String.format

现在,我已经编写了一个扩展来格式化字符串,如:

public static string FormatWith(this string me, params object[] args) {
    return string.Format(me, args);
}
Run Code Online (Sandbox Code Playgroud)

所以我可以这样做:

在此输入图像描述

现在我想实现类似的语法高亮{0}{1}一个字符串,然后每当.FormatWith.ReSharper有可能这样吗?

c# resharper

3
推荐指数
1
解决办法
174
查看次数

Xamarin iOS - 绑定库时如何包含依赖项?

我有一个 Obj-C 本机库libCMX.a,我希望为其创建 C# 绑定,但该库有多个依赖项,例如带有几个and文件的JASidePanels.m.h

如何将这些包含在 Xamarin 绑定项目中,以便将它们正确链接到生成的 DLL 中?

我知道我可以FrameworksLinkWith属性中指定,但是如何以主文件和头文件的形式包含纯代码依赖项?

编辑:该库是专有的(Cisco CMX SDK),我无权访问源代码。

编辑 2:该库是框架 (CMX.framework) 的一部分,我从中提取了无扩展存档并将其重命名为 libCMX.a 以匹配 Xamarin 的默认库命名。

c# xamarin.ios ios xamarin

3
推荐指数
1
解决办法
1416
查看次数

是否有正则表达式突出显示的ReSharper注释?

我喜欢添加类似于StringFormatMethod我的格式化方法的注释,因此ReSharper突出显示格式参数等.

ReSharper还具有正则表达式的语法高亮,我希望在我自己的扩展方法中对正则表达式模式进行相同的处理ReplaceRegex:

常规表达语法突出显示

请注意如何\s*仅在中突出显示Regex.Replace.

我查看了Jetbrains.Annotations命名空间,但找不到任何相关属性.目前没有办法做到这一点吗?

c# regex resharper visual-studio-2015

3
推荐指数
1
解决办法
774
查看次数

是否可以在 TypeScript 中共享全局声明?

我通常将一些服务器端变量放入全局范围,以便我可以从客户端 TypeScript 代码中的任何位置访问它们,例如:

.cshtml 中的服务器:

<script>
  const RazorGlobals = {
    apiBaseUrl: '@Model.ApiBaseUrl'
  }
</script>
Run Code Online (Sandbox Code Playgroud)

客户端代码:

declare const RazorGlobals: {
  apiBaseUrl: string
}

fetch(RazorGlobals.apiBaseUrl + '/myResource').then(doStuff)
Run Code Online (Sandbox Code Playgroud)

目前,我必须在declare const RazorGlobals...需要使用它的每个文件顶部重复该部分。我正在寻找一种在单个位置定义此声明的方法,例如以下伪代码:

全局.d.ts:

export declare const RazorGlobals: {
  apiBaseUrl: string
}
Run Code Online (Sandbox Code Playgroud)

文件1.ts:

import './globals'

fetch(RazorGlobals.apiBaseUrl + '/myResource').then(doStuff)
Run Code Online (Sandbox Code Playgroud)

文件2.ts:

import './globals'

fetch(RazorGlobals.apiBaseUrl + '/myOtherResource').then(doOtherStuff)
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这样的目标?

typescript

3
推荐指数
1
解决办法
4601
查看次数

是否可以在C#中的外部类上叠加接口?

为了隐藏接口后面的类的具体实现,例如依赖注入,我发现使用我感兴趣的方法和属性提取接口很有用.即使对于生成的类,我通常也可以创建一个分类它实现了提取的接口.

但是如果我想为外部类提取接口,例如从.dll中提取,我找不到任何方法来做到这一点.它甚至可能吗?

c# interface class

2
推荐指数
1
解决办法
1256
查看次数