我得到了一个返回a的函数,Collection<string>它以递归方式调用自身,最终返回一个大函数Collection<string>.
现在,我只是想知道合并列表的最佳方法是什么?Collection.CopyTo()只复制到string [],使用foreach()循环感觉效率低下.但是,因为我也想过滤掉重复的内容,我觉得我最终会得到一个调用Contains()它的foreach Collection.
我想知道,有一种更有效的方法来获得一个递归函数,它返回一个没有重复的字符串列表吗?我不必使用a Collection,它可以是几乎任何合适的数据类型.
只有排除,我绑定到Visual Studio 2005和.net 3.0,所以没有LINQ.
编辑:澄清:该功能将用户从Active Directory中取出,查看用户的直接报告,然后递归查看每个用户的直接报告.因此,最终结果是给定用户的"命令链"中的所有用户的列表.由于这是经常执行的,并且目前对于某些用户需要20秒,我正在寻找改进它的方法.将结果缓存24小时也在我的列表btw.,但我想看看如何在应用缓存之前改进它.
我想以编程方式在Image上创建一个光泽效果,有点类似于Web在更新到2.0 Beta时采用的Apple设计.
基本上这个:
示例图标http://nhc.hcmuns.googlepages.com/web2_icons.jpg
现在,我在这里看到两种方法:我创建一个具有光泽效果的Alpha通道的图像,然后我只是组合输入和光泽alpha图标来创建它.
第二种方法:在代码中创建Alpha Gloss Image,然后将其与输入图形合并.
我更喜欢第二种解决方案,但我不是一个图形人,我不知道算法是什么来创造这样的效果.有人可以给我一些指示*我实际上在这里看到的是什么吗?有没有一个名字的"光泽算法"?甚至是.net实现了吗?
*不,不是那些类型的指针.
使用NHibernate完成我的第一步,我正在尝试从hbm文件自动创建表.数据库后端是SQL Server 2008 Developer Edition.
这是我在NHibernate教程中看到的常见示例代码:
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(Posting).Assembly);
new SchemaExport(cfg).Execute(false,true,false,false);
Run Code Online (Sandbox Code Playgroud)
可悲的是,这不起作用.我已将show_sql设置为true,并且它不会打印出任何语句.查看SQL分析器,我看到我的应用程序连接到数据库,但后来什么也没做.
我可以通过将第一个参数("script")更改为true来解决这个问题:
new SchemaExport(cfg).Execute(true,true,false,true);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么.遗憾的是没有真正解释SchemaExport的参数(也没有解释.Create和.Execute之间的区别),我想知道这个参数的作用,以及为什么不需要它,即使用SQL Compact Edition时(也适用于脚本是假的)
我只是想知道 - 如果我需要将一个程序集部署到GAC中,那么"官方"的方式是什么?
目前我们手动拖放到c:\ windows\assembly文件夹或我们使用gacutil.exe.第一种方式显然不是好方法(毕竟它是手动过程),gacutil是SDK的一部分,在生产服务器上默认不可用.
是否有任何Microsoft部署指南?
我试图了解IL循环中的while循环.我写了这个C#函数:
static void Brackets()
{
while (memory[pointer] > 0)
{
// Snipped body of the while loop, as it's not important
}
}
Run Code Online (Sandbox Code Playgroud)
IL看起来像这样:
.method private hidebysig static void Brackets() cil managed
{
// Code size 37 (0x25)
.maxstack 2
.locals init ([0] bool CS$4$0000)
IL_0000: nop
IL_0001: br.s IL_0012
IL_0003: nop
// Snipped body of the while loop, as it's not important
IL_0011: nop
IL_0012: ldsfld uint8[] BFHelloWorldCSharp.Program::memory
IL_0017: ldsfld int16 BFHelloWorldCSharp.Program::pointer
IL_001c: ldelem.u1
IL_001d: ldc.i4.0
IL_001e: cgt
IL_0020: …Run Code Online (Sandbox Code Playgroud) 我想用Ruby开发一个桌面应用程序.但是,我希望在每个平台上都有一个原生GUI(而不是跨平台的GUI工具包,它看起来在所有平台上都非常糟糕).
我希望每个平台都要做不同的GUI(因为它不仅仅是外观,还有不同的行为和习语),但我想知道我的选择是什么?特别想知道是否有一种干净的方法来分离前端和后端并正确绑定数据?
目标平台是Windows(Vista&7,XP是Bonus),Mac OS X(Cocoa)和Linux(GTK?Qt?不知道).
有一个关于IRepository及其用途的问题,它有一个看似很好的答案.
我的问题是:我如何干净地处理彼此相关的实体,而不是IRepository然后只是一个没有实际目的的层?
假设我有这些业务对象:
public class Region {
public Guid InternalId {get; set;}
public string Name {get; set;}
public ICollection<Location> Locations {get; set;}
public Location DefaultLocation {get; set;}
}
public class Location {
public Guid InternalId {get; set;}
public string Name {get; set;}
public Guid RegionId {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
有规则:
那么我的RegionRepository会是什么样子?
public class RegionRepository : IRepository<Region>
{
// Linq To Sql, injected through constructor
private Func<DataContext> _l2sfactory;
public ICollection<Region> GetAll(){
using(var db = _l2sfactory()) …Run Code Online (Sandbox Code Playgroud) 我正在看C#7的新switch语句,虽然我可以打开类型作为模式匹配的一部分很棒,但我想知道如果我已经知道它可以避免重新说明类型吗?
例:
private static void BetterSwitchCase(string s)
{
switch (s)
{
case string x when x.Length == 3 && int.TryParse(x, out int i):
Console.WriteLine($"s is a string that parses to {i}");
break;
default:
Console.WriteLine("No Match.");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我的case语句重新声明,string x即使我正在打开的类型已经是一个字符串,我只关心它Length,如果它int.TryParse是.
省略它不会编译:
// Syntax error, ':' expected
case when s.Length == 3 && int.TryParse(s, out int i):
// A constant value is expected
case s when s.Length == 3 && int.TryParse(s, out int i):
Run Code Online (Sandbox Code Playgroud)
所以我只是想知道是否有一种方法可以省略它,或者它只是我必须接受的模式匹配语法的一部分.
我正在将 GitHub Actions 设置为我的一个项目的 CI,整个构建过程基本上是一个 PowerShell 脚本,由环境变量驱动。
这既是为了最大限度地减少供应商锁定,并确保我可以使用几乎相同的过程在本地运行构建。
现在,我的构建脚本确定了一些内容并将其放入环境变量中 - 具体来说,我有一个MH_IS_PROD_BUILDTrue 或 False的变量,并确定我推送到哪个 nuget 包存储库。
但是,当运行 shell 的步骤完成时,环境变量将不复存在,因为进一步的步骤似乎是在新环境中运行的。
我想做的是这样的事情(缩写):
steps:
- name: Run build script
id: pwshbuild
shell: pwsh
run: |
cd scripts
./build.ps1
# The above sets $Env:MH_IS_PROD_BUILD to either True or False
- name: Push Publish to GPR (Dev Package)
if: steps.pwshbuild.outputs.MH_IS_PROD_BUILD == 'False'
shell: pwsh
run: |
# omitted: determine $nupkgPath
nuget push $nupkgPath -Source "GPR" -SkipDuplicate
- name: Push Publish …Run Code Online (Sandbox Code Playgroud) 我相信我已经知道了答案,但我并不是百分百肯定,所以只是一个简单的问题:红/绿测试究竟意味着什么?
我将其理解为"首先编写测试,以便它们全部失败(=全红色),然后编写代码并观察每个测试如何变为绿色,当所有测试都变为绿色时,您就可以了".
我在斯科特的混合MVC讲话中听到了这个,所以我不知道这是一个"官方"术语,还是他刚刚完成的.(编辑:斯科特实际上也解释了它从55:00开始解释,并且他很好地回答了为什么他相信它)
.net ×6
c# ×3
c#-7.0 ×1
cil ×1
collections ×1
deployment ×1
gac ×1
image ×1
linq-to-sql ×1
linux ×1
macos ×1
nhibernate ×1
ruby ×1
unit-testing ×1
windows ×1