小编Mat*_*ren的帖子

使用动态类型作为方法参数时的奇怪行为

我有以下接口是现有项目的一部分.我想用动态对象调用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)

dynamic c#-4.0

37
推荐指数
1
解决办法
4802
查看次数

使用"yield"关键字实现状态机

使用yield关键字来实现这里所示的简单状态机是否可行.对我来说,看起来C#编译器为您完成了艰苦的工作,因为它在内部实现了状态机以使yield语句有效.

你可以在编译器已经完成的工作之上捎带并让它为你实现大部分状态机吗?

有没有人这样做,技术上可行吗?

c# yield state-machine fsm

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

使用不安全代码有什么含义

除了代码本身可以直接访问内存的事实.使用"/ unsafe"编译器标志和"fixed"关键字的其他含义是什么?是否存在与我的.exe的代码签名和部署相关的影响(我的应用程序仅限桌面)?

(这不是关于我是否应该这样做,为什么我的问题在这里讨论)

.net clr unsafe unmanaged fixed

23
推荐指数
2
解决办法
2114
查看次数

如何在C#中启用第二台显示器?

是否可以以编程方式启用第二个监视器并使用C#将Windows桌面扩展到它上面?它需要相当于打开下图中的复选框.

替代文字

c# desktop multiple-monitors winforms

19
推荐指数
2
解决办法
2万
查看次数

如何用硬件做TDD

我工作的所有项目都与一个硬件接口,这通常是软件的主要目的.有没有什么方法可以将TDD应用到与硬件配合使用的代码中?

更新:对不起我的问题更清楚.

我使用的硬件是一个帧捕获器,可以从相机中捕获图像.然后我处理这些图像,显示它们并将它们保存到磁盘.我可以使用先前捕获的存储在磁盘上的图像模拟捕获图像后发生的所有处理.

但这是我想要测试的与硬件的实际交互.例如,当没有连接相机时,我的软件是否正确应对,它是否正确启动和停止抓取等等.但这与硬件相关联,我不知道如何在硬件不存在时测试它或如果我甚至想要这样做?

第二次更新:我也在寻找人们如何处理这种情况的一些具体例子.

hardware tdd

13
推荐指数
2
解决办法
3814
查看次数

如何在测试期间处理陈旧的索引?

我在内存模式下使用RavenDB进行单元测试.我的查询由静态索引支持.我没有使用WaitForNonStaleResults()API(我也不想).

测试的典型工作流程是:

  1. 在In-Memory模式下初始化RavenDB
  2. 使用集成索引 IndexCreation.CreateIndexes(Assembly, IDocumentStore)
  3. 插入测试数据(用于验证查询行为)
  4. 运行查询
  5. 验证查询输出

我注意到步骤1-3发生得如此之快,静态索引没有时间在步骤4之前得到更新 - 因此索引是陈旧的.

我为此创建了一个快速的解决方案.在第3步之后,我执行:

while (documentStore.DocumentDatabase.Statistics.StaleIndexes.Length != 0)
    Thread.Sleep(10);
Run Code Online (Sandbox Code Playgroud)

这感觉很麻烦.我想知道的是:

  • 在In-Memory模式下运行RavenDB时,索引是否过时是正常的?
  • 在测试期间是否有更好的方法来避免过时的索引?

c# testing indexing ravendb

11
推荐指数
1
解决办法
893
查看次数

如何使用C#从pdf文件中提取图像

如何将.pdf文件中的图像转换为System.Drawing.Bitmap?

c# pdf image bitmap

10
推荐指数
1
解决办法
3448
查看次数

用于将项添加到字典的LINQ方法

我试图通过在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)

哪里allWordsIEnumerable<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)

.net linq performance foreach

9
推荐指数
1
解决办法
1万
查看次数

这段代码可以优化吗?

我有一些图像处理代码循环通过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)

.net c# optimization image-processing

7
推荐指数
2
解决办法
1263
查看次数

如何检测图像方向(文本)

我的程序正在处理存储为单独位图的传真文档
我想知道是否有一种方法可以自动检测页面方向(垂直或水平),以便按正确的顺序显示用户的图像预览(如果需要,则表示旋转)

任何建议非常感谢!

编辑:澄清:
当Faxmachine收到多页文档时,它将每个页面保存为单独的TIFF文件.
我的应用程序有内置的查看器显示这些文件.所有文件都缩放为A4格式并保存在TIFF中(因此无法通过高度/宽度参数检测方向)
我的查看器默认以纵向模式显示图像

我想做的是在横向模式下打印组织文档时自动检测情况(例如宽Excel表格)然后我想为最终用户显示旋转预览以加快预览过程

显然有4种可能的传真方向纵向/横向x 2种旋转.

我甚至对组织doc是横向或纵向时的简化解决方案感兴趣(我注意到大多数横向文档都需要顺时针旋转)

编辑2:想法
我认为这可能是一个想法:
如果我可以绘制水平和垂直线,并检查线是否没有削减任何(黑色)点.然后我们可以比较更多类型的线(水平或垂直)和他对页面方向的决定.
你怎么看 ?

.net c# image bitmap image-processing

7
推荐指数
1
解决办法
5865
查看次数