Pascal的一个特性我发现非常有用的是命名数据类型的能力,例如
type
person: record
name: string;
age: int;
end;
var
me: person;
you: person;
etc
Run Code Online (Sandbox Code Playgroud)
你能用C#做类似的事吗?我希望能够做类似的事情
using complexList = List<Tuple<int,string,int>>;
complexList peopleList;
anotherList otherList;
Run Code Online (Sandbox Code Playgroud)
因此,如果我必须更改数据类型的定义,我可以在一个地方完成.
C#是否支持实现此目的的方法?
是否可以使用C#在方法调用中将lambda表达式作为IComparer参数传递?
例如
var x = someIEnumerable.OrderBy(aClass e => e.someProperty,
(aClass x, aClass y) =>
x.someProperty > y.SomeProperty ? 1 : x.someProperty < y.SomeProperty ? -1 : 0);
Run Code Online (Sandbox Code Playgroud)
我不能完全把它编译成所以我猜不是,但看起来lambda和匿名代表之间的这种明显的协同作用让我觉得我必须做一些愚蠢的错误.
TIA
关于Docker的所有聊天,以及它如何融入虚拟化世界,我有点困惑.所以这是一个直接的问题:我可以打包一个.Net应用程序(通常在Windows 7等上运行)在Docker容器中运行,然后在支持Docker的"任何"主机上执行吗?
TIA.
如果我有一个如下所示的循环:
foreach (string pass in new string[] { "pass1", "pass2", "pass3" })
{
x = pass; //etc
}
Run Code Online (Sandbox Code Playgroud)
匿名字符串数组最初是创建一次,还是每次传递都重新创建一次?
我相信前者,但同事们确信这是一个等待发生的错误,因为他们说foreach循环的每次迭代都会导致创建一个新的字符串数组.
VS反汇编代码表明我是对的,但我想确定.
我们正在考虑这个问题的原因是试图理解一个神秘的错误,它报告了一个集合在迭代时已被更改.
是否有可能(最好使用LINQ)来订购一个具有自然分组的集合,在集团内部本身而不会扰乱集团秩序?
让我解释.我有一个集合:
List<grpitem> list = new List<grpitem>()
{
new grpitem() {groupCode="1", item="a"},
new grpitem() {groupCode="1", item="b"},
new grpitem() {groupCode="1", item="c"},
new grpitem() {groupCode="2", item="a"},
new grpitem() {groupCode="2", item="c"},
new grpitem() {groupCode="2", item="b"},
new grpitem() {groupCode="3", item="c"},
new grpitem() {groupCode="3", item="b"},
new grpitem() {groupCode="3", item="a"}
};
Run Code Online (Sandbox Code Playgroud)
其到达的顺序(groupCode的顺序)在别处确定.我需要重新排列集合,以便在每个组中,元素按项目值排序,即:
{groupCode="1", item="a"},
{groupCode="1", item="b"},
{groupCode="1", item="c"},
{groupCode="2", item="a"},
{groupCode="2", item="b"},
{groupCode="2", item="c"},
{groupCode="3", item="a"},
{groupCode="3", item="b"},
{groupCode="3", item="c"},
Run Code Online (Sandbox Code Playgroud)
该集合可以同样到达groupCode顺序"2","3","1"或其他任何内容.我不能打扰 - 我只需要重新排序每组内的元素.
LINQ查询真的很整洁!(我可能昏暗但我还没找到一个)
我试过这个:
var reOrdered = (from x in list
group x by x.groupCode …Run Code Online (Sandbox Code Playgroud) 我主要理解延迟执行,但我对特定情况有疑问:
给定一个代码片段,如
var resultsOfInterest = from r in ...
select r;
foreach (var x in resultsOfInterest)
{
//do something with x
}
Run Code Online (Sandbox Code Playgroud)
查询resultsOfInterest 执行了多少次?一旦设置foreach循环,或每个元素'x'一次?是否会更有效率
foreach (var x in resultsOfInterest.ToArray())
{
//do something with x
}
Run Code Online (Sandbox Code Playgroud)
?
TIA
我有一些代码使用 Crystal Reports 运行时库来生成和丢弃一个小虚拟报告,以确保在用户创建真实报告之前将库及时加载到内存中。(这是一个“感知性能”问题。)当用户生成报告时,性能得到显着改善,因此显然一切正常。
现在我需要编写一个单元测试来证明 Crystal 库确实已按预期加载到内存中 - 但是我尝试测试其中的内容并Assembly.GetExecutingAssembly().GetModules()没有帮助。(GetCallingAssembly().GetModules()也好不到哪里去。)
如何从单元测试中检查这些程序集是否已加载?
TIA
以下代码表明我不能在结构中使用隐式属性:
public struct LimitfailureRecord
{
public LimitfailureRecord(string sampleCode)
{
SampleCode = sampleCode;
}
public string SampleCode {get; set;}
{
}
}
Run Code Online (Sandbox Code Playgroud)
它无法编译,并显示错误消息
"在将控制权返回给调用者之前,必须完全分配自动实现的属性'blahblah.LimitfailureRecord.SampleCode'的后备字段.考虑从构造函数初始化程序调用默认构造函数."
如果我将结构更改为类,那很好.我需要做什么才能使它作为结构工作?如果我可以避免它,我宁愿不去支持字段的长度(这是真正代码的严重剥离版本).
我试图在原则上做一些非常简单的事情,但是我不断得到一个令cross-threading exception我难过的东西因为我没有开始使用多个线程.
我有一个Windows窗体应用程序.它启动另一个Windows窗体应用程序(使用System.Diagnostics.Process该类),并在该应用程序关闭时捕获Exited事件.然后,我的应用程序事件处理程序尝试将文本从剪贴板复制到当前显示的表单上的控件.在这一点Cross-threading exception上抛出了一个.
我假设问题是关闭应用程序中的事件是在另一个线程中(我在我的舒适区之外,所以请耐心等待),所以问题归结为"如何防止此异常?"
我有点受限于必须从剪贴板复制,但如果可以解决问题,我可以以不同的方式启动其他应用程序.
我正在使用 VS2008 TFS(使用 MSTest)。
我有一个可靠的单元测试,它依赖于项目子文件夹中的数据文件(即 testproject1\TestData)。数据文件属性为 Build Action=Content,Copy Always。(它不是这样的测试数据文件,而是生产代码读取并通常在其自己的文件夹中期望的文件)
当测试构建并执行时,数据文件被正确复制到...\TestResults\(testruniD)\Out 文件夹中,测试代码找到它。
现在,我将测试及其数据文件移动到解决方案中的另一个测试项目(它真正应该在的位置),数据文件位于与新测试项目 (testproject2\TestData) 和数据文件属性相同的文件夹中被检查为仍然如上。但是,在重新构建时,测试在新位置失败,因为数据文件尚未复制到测试结果输出文件夹,因此执行代码无法找到它。
我应该做些什么来确保仍然复制数据文件?
我之前遇到过一个相关的问题,一些数据文件被复制到测试结果输出文件夹,而有些则没有,没有明显的原因,这让我感到困惑。
TIA