我正在使用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)
但是,然后我丢失 …
问题:我有2个类型的对象,让他们打电话Building和Improvement.大约有30个Improvement实例,而可能有1-1000 个实例Building.对于的每个组合Building和Improvement,我不得不执行一些繁重的计算,并且将结果存储在一个Result对象.
两个BuildingS和ImprovementS可通过一个整数ID来表示.
然后我需要能够:
Result给定Building和Improvement有效Result所有Improvements 执行聚合Building,如.Sum()和.Average()Result所有Buildings,对s 执行相同的聚合Improvement这将发生在Web服务器后端,因此内存可能是一个问题,但速度是最重要的.
思念至今:
Dictionary<Tuple<int, int>, Result>with <BuildingID, ImprovementID>作为键.这应该给我快速插入和单个查找,但我关心.Where()和.Sum()性能.BuildingIDs,一个用于ImprovementIDs,以及Resultas值.另外,构建两个Dictionary<int, int>将BuildingIDs和ImprovementIDs 映射到它们各自的数组行/列索引.这可能意味着最多1000+ Dictionarys,这会是一个问题吗?List<Tuple<int, int, Result>> …我在 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上找插件没问题?
我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.MsBuild的Release配置:
<PackageReference Include="Scripty.MsBuild" Version="0.7.4" Condition="'$(Configuration)'=='Debug'" />
Run Code Online (Sandbox Code Playgroud)
这使我可以在调试模式下从VS进行构建,dotnet并在构建服务器上进行构建。
但是,我仍然希望能够dotnet run …
ReSharper有一个奇特的功能,突出显示格式变量,例如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有可能这样吗?
我有一个 Obj-C 本机库libCMX.a,我希望为其创建 C# 绑定,但该库有多个依赖项,例如带有几个and文件的JASidePanels。.m.h
如何将这些包含在 Xamarin 绑定项目中,以便将它们正确链接到生成的 DLL 中?
我知道我可以Frameworks在LinkWith属性中指定,但是如何以主文件和头文件的形式包含纯代码依赖项?
编辑:该库是专有的(Cisco CMX SDK),我无权访问源代码。
编辑 2:该库是框架 (CMX.framework) 的一部分,我从中提取了无扩展存档并将其重命名为 libCMX.a 以匹配 Xamarin 的默认库命名。
我喜欢添加类似于StringFormatMethod我的格式化方法的注释,因此ReSharper突出显示格式参数等.
ReSharper还具有正则表达式的语法高亮,我希望在我自己的扩展方法中对正则表达式模式进行相同的处理ReplaceRegex:
请注意如何\s*仅在中突出显示Regex.Replace.
我查看了Jetbrains.Annotations命名空间,但找不到任何相关属性.目前没有办法做到这一点吗?
我通常将一些服务器端变量放入全局范围,以便我可以从客户端 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)
有没有办法实现这样的目标?
为了隐藏接口后面的类的具体实现,例如依赖注入,我发现使用我感兴趣的方法和属性提取接口很有用.即使对于生成的类,我通常也可以创建一个分类它实现了提取的接口.
但是如果我想为外部类提取接口,例如从.dll中提取,我找不到任何方法来做到这一点.它甚至可能吗?
c# ×6
resharper ×2
typescript ×2
xamarin ×2
.net ×1
.net-core ×1
asp.net-core ×1
auth0 ×1
class ×1
interface ×1
ios ×1
linq ×1
msbuild ×1
mvvmcross ×1
performance ×1
regex ×1
xamarin.ios ×1