我有以下接口是现有项目的一部分.我想用动态对象调用Store(..)函数.但我不想更改接口层次结构(如果可能的话).
public interface IActualInterface
{
void Store(object entity);
}
public interface IExtendedInterface : IActualInterface
{
//Interface items not important
}
public class Test : IExtendedInterface
{
public void Store(object entity)
{
Console.WriteLine("Storing: " + entity.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
和以下代码:
IExtendedInterface extendedInterfaceTest = new Test();
IActualInterface actualInterfaceTest = new Test();
Test directTest = new Test();
dynamic employee = new ExpandoObject();
employee.Name = "John Smith";
employee.Age = 33;
employee.Phones = new ExpandoObject();
employee.Phones.Home = "0111 123123";
employee.Phones.Office = "027 321123";
employee.Tags = new …
Run Code Online (Sandbox Code Playgroud) 使用yield关键字来实现这里所示的简单状态机是否可行.对我来说,看起来C#编译器为您完成了艰苦的工作,因为它在内部实现了状态机以使yield语句有效.
你可以在编译器已经完成的工作之上捎带并让它为你实现大部分状态机吗?
有没有人这样做,技术上可行吗?
除了代码本身可以直接访问内存的事实.使用"/ unsafe"编译器标志和"fixed"关键字的其他含义是什么?是否存在与我的.exe的代码签名和部署相关的影响(我的应用程序仅限桌面)?
(这不是关于我是否应该这样做,为什么我的问题在这里讨论)
是否可以以编程方式启用第二个监视器并使用C#将Windows桌面扩展到它上面?它需要相当于打开下图中的复选框.
我工作的所有项目都与一个硬件接口,这通常是软件的主要目的.有没有什么方法可以将TDD应用到与硬件配合使用的代码中?
更新:对不起我的问题更清楚.
我使用的硬件是一个帧捕获器,可以从相机中捕获图像.然后我处理这些图像,显示它们并将它们保存到磁盘.我可以使用先前捕获的存储在磁盘上的图像模拟捕获图像后发生的所有处理.
但这是我想要测试的与硬件的实际交互.例如,当没有连接相机时,我的软件是否正确应对,它是否正确启动和停止抓取等等.但这与硬件相关联,我不知道如何在硬件不存在时测试它或如果我甚至想要这样做?
第二次更新:我也在寻找人们如何处理这种情况的一些具体例子.
我在内存模式下使用RavenDB进行单元测试.我的查询由静态索引支持.我没有使用WaitForNonStaleResults()
API(我也不想).
测试的典型工作流程是:
IndexCreation.CreateIndexes(Assembly, IDocumentStore)
我注意到步骤1-3发生得如此之快,静态索引没有时间在步骤4之前得到更新 - 因此索引是陈旧的.
我为此创建了一个快速的解决方案.在第3步之后,我执行:
while (documentStore.DocumentDatabase.Statistics.StaleIndexes.Length != 0)
Thread.Sleep(10);
Run Code Online (Sandbox Code Playgroud)
这感觉很麻烦.我想知道的是:
我试图通过在C#中实现Peter Norvig的拼写纠正器来学习更多关于LINQ的知识.
第一部分涉及获取大量文字(约1百万)并将其放入字典中,其中key
是单词,并且value
是出现次数.
我通常会这样做:
foreach (var word in allWords)
{
if (wordCount.ContainsKey(word))
wordCount[word]++;
else
wordCount.Add(word, 1);
}
Run Code Online (Sandbox Code Playgroud)
哪里allWords
是IEnumerable<string>
在LINQ中我现在这样做:
var wordCountLINQ = (from word in allWordsLINQ
group word by word
into groups
select groups).ToDictionary(g => g.Key, g => g.Count());
Run Code Online (Sandbox Code Playgroud)
我通过查看所有的两个词典进行比较<key, value>
,它们是相同的,所以它们产生了相同的结果.
该foreach
循环需要3.82秒和LINQ查询需要4.49秒
我正在使用秒表类计时,我正在RELEASE模式下运行.我不认为表现不好我只是想知道是否有差异的原因.
我是以低效的方式进行LINQ查询还是我错过了什么?
更新:这是完整的基准代码示例:
public static void TestCode()
{
//File can be downloaded from http://norvig.com/big.txt and consists of about a …
Run Code Online (Sandbox Code Playgroud) 我有一些图像处理代码循环通过2个多维字节数组(相同大小).它从源数组中获取一个值,对其执行计算,然后将结果存储在另一个数组中.
int xSize = ResultImageData.GetLength(0);
int ySize = ResultImageData.GetLength(1);
for (int x = 0; x < xSize; x++)
{
for (int y = 0; y < ySize; y++)
{
ResultImageData[x, y] = (byte)((CurrentImageData[x, y] * AlphaValue) +
(AlphaImageData[x, y] * OneMinusAlphaValue));
}
}
Run Code Online (Sandbox Code Playgroud)
循环当前需要~11ms,我假设主要是因为访问字节数组值,因为计算非常简单(2次乘法和1次加法).
有什么办法可以加快速度吗?它是我的程序的一个时间关键部分,这个代码每秒被调用80-100次,所以任何速度增加,无论多小,都会产生影响.此刻xSize = 768和ySize = 576,但这将在未来增加.
更新:感谢Guffa(请参阅下面的答案),以下代码为每个循环节省了4-5ms.虽然它是不安全的代码.
int size = ResultImageData.Length;
int counter = 0;
unsafe
{
fixed (byte* r = ResultImageData, c = CurrentImageData, a = AlphaImageData)
{
while (size > …
Run Code Online (Sandbox Code Playgroud) 我的程序正在处理存储为单独位图的传真文档
我想知道是否有一种方法可以自动检测页面方向(垂直或水平),以便按正确的顺序显示用户的图像预览(如果需要,则表示旋转)
任何建议非常感谢!
编辑:澄清:
当Faxmachine收到多页文档时,它将每个页面保存为单独的TIFF文件.
我的应用程序有内置的查看器显示这些文件.所有文件都缩放为A4格式并保存在TIFF中(因此无法通过高度/宽度参数检测方向)
我的查看器默认以纵向模式显示图像
我想做的是在横向模式下打印组织文档时自动检测情况(例如宽Excel表格)然后我想为最终用户显示旋转预览以加快预览过程
显然有4种可能的传真方向纵向/横向x 2种旋转.
我甚至对组织doc是横向或纵向时的简化解决方案感兴趣(我注意到大多数横向文档都需要顺时针旋转)
编辑2:想法
我认为这可能是一个想法:
如果我可以绘制水平和垂直线,并检查线是否没有削减任何(黑色)点.然后我们可以比较更多类型的线(水平或垂直)和他对页面方向的决定.
你怎么看 ?