小编Ben*_*zun的帖子

Moq - mock.Raise应该在没有安装程序的情况下在测试单元中引发事件

我有一个演示者类,它附加了注入视图的事件.现在我想测试演示者对事件的正确反应.

这是视图界面IView:

public interface IView 
{
    event EventHandler MyEvent;
    void UpdateView(string test);
}
Run Code Online (Sandbox Code Playgroud)

这是实现IView的视图

public partial class MyView : IView
{
    public event EventHandler MyEvent;

    public MyView()
    {
        this.combo.SelectedIndexChanged += this.OnSelectedIndexChanged;
    }

    public void UpdateView(string test)
    {
        this.textBox.Text = test;
    }

    private OnSelectedIndexChanged(Object sender, EventArgs e)
    {
        if (this.MyEvent != null)
        {
            this.MyEvent(sender, e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是受测试的主持人:

public class MyPresenter
{
    private IView _view;
    public MyPresenter(IView view)
    {
        this._view = view;
        this._view.MyEvent += this.OnMyEvent;
    }

    private void OnMyEvent(Object sender, …
Run Code Online (Sandbox Code Playgroud)

c# tdd moq

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

Powershell模块:动态强制分层参数

所以我真正想要的是在PS模块中有些可用的标签完成.ValidateSet似乎是去这里的方式.

不幸的是我的数据是动态的,所以我不能预先用所有有效值来注释参数.DynamicParameters/IDynamicParameters似乎是解决问题.

把这些东西放在一起(并将我的失败减少到一个简单的测试用例)我们最终得到:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Management.Automation;
using System.Text;
using System.Threading.Tasks;

namespace PSDummy
{
    [Cmdlet(VerbsCommon.Get, "BookDetails")]
    public class GetBookDetails : Cmdlet, IDynamicParameters
    {
        IDictionary<string, string[]> m_dummyData = new Dictionary<string, string[]> {
            {"Terry Pratchett", new [] {"Small Gods", "Mort", "Eric"}},
            {"Douglas Adams", new [] {"Hitchhiker's Guide", "The Meaning of Liff"}}
        };

        private RuntimeDefinedParameter m_authorParameter;
        private RuntimeDefinedParameter m_bookParameter;

        protected override void ProcessRecord()
        {
              // Do stuff here..
        }

        public object GetDynamicParameters()
        {
            var parameters …
Run Code Online (Sandbox Code Playgroud)

c# powershell

22
推荐指数
1
解决办法
1087
查看次数

将List的成员移动到List的前面

如何创建一个取整数的方法,并将at索引i的成员从其当前位置移动到列表的前面?List<T>i

.net c#

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

逐行读取文本文件,具有精确的偏移/位置报告

我的简单要求:读取一个巨大的(>一百万)行测试文件(对于这个例子假设它是某种类型的CSV)并保持对该行开头的引用以便将来更快地查找(读取一行,从X).

我首先尝试了一种天真而简单的方法,使用a StreamWriter并访问底层BaseStream.Position.不幸的是,这不符合我的意图:

给定包含以下内容的文件

Foo
Bar
Baz
Bla
Fasel
Run Code Online (Sandbox Code Playgroud)

这个非常简单的代码

using (var sr = new StreamReader(@"C:\Temp\LineTest.txt")) {
  string line;
  long pos = sr.BaseStream.Position;
  while ((line = sr.ReadLine()) != null) {
    Console.Write("{0:d3} ", pos);
    Console.WriteLine(line);
    pos = sr.BaseStream.Position;
  }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

000 Foo
025 Bar
025 Baz
025 Bla
025 Fasel
Run Code Online (Sandbox Code Playgroud)

我可以想象,流正在尝试提供帮助/效率,并且可能在需要新数据时读入(大)块.对我来说这很糟糕..

最后的问题是:在没有使用基本Stream并且手动搞乱\ r \n\r \n和字符串编码等的情况下逐行读取文件时获取(byte,char)偏移量的方法是什么?没什么大不了的,真的,我只是不喜欢建造可能存在的东西......

c# text-files offset

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

可视化使用ANTLR创建的AST(在.Net环境中)

对于一个宠物项目,我开始摆弄ANTLR.在完成一些教程后,我现在正在尝试为我自己的语言创建语法并生成AST.

现在我主要在ANTLRWorks中乱搞,但现在我已经验证了解析树看起来很好我想(迭代地,因为我还在学习并且仍然需要对最终结构做出一些决定)树)创建AST.似乎antlrworks不会将其可视化(或者至少不使用"Interpreter"功能,Debug不能在我的任何机器上运行).

底线:是以手动方式可视化AST的唯一方法,遍历/显示它还是以字符串表示形式将树打印到控制台?

我正在寻找的是从输入,语法 - >视觉AST表示到ANTLRWorks的"解释器"功能的简单方法.有任何想法吗?

c# antlr antlrworks

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

Android多点触控!任何人?

我现在不得不放弃这个纯粹的学术问题,但我非常希望能在近期看到解决方案.

由于Android处理多点触控的方式,你可以(我认为)只在一个视图中捕获事件.我已经尝试了一个hack来解决这个容器布局,拦截事件通过查看coords并更改动作本身来查看它所属的View,这样组件看起来就是单个触摸事件.我撰写此类事件然后将其路由到视图.

有没有人有更好的想法这样做?

如果有人想要我上面描述的代码只是问我发布它!

玩得开心,祝你好运:D JQCorreia

public class Container extends LinearLayout
{      
        LinkedHashMap<Integer,View> pointers = new LinkedHashMap<Integer,View>();
        ArrayList<View> views  = new ArrayList<View>();

        public Container(Context context) {
                super(context);
                initialize(context);

        }

        public Container(Context context, AttributeSet attrs) {
                super(context, attrs);
                initialize(context);
        }

        private void initialize(Context context)
        {

        }
        @Override
        public void onLayout(boolean changed, int l, int t, int r, int b)
        {
                super.onLayout(changed, l, t, r, b);
                views = LayoutUtil.flattenLayout(this,false);
                for(View foo : views)
                {
                        Rect rect = new Rect();
                        foo.getGlobalVisibleRect(rect);
                }
        } …
Run Code Online (Sandbox Code Playgroud)

android multi-touch

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

mvn dependency:go-offline 不下载 maven-surefire-plugin 的要求

我正在尝试在 docker 中构建一个开源项目,并希望节省构建时间,因此我尝试使用mvn dependency:go-offline,它下载 maven-surefire-plugin 本身。

之后运行的mvn -o clean package结果是

[错误] 无法在项目 oxalis-api 上执行目标 org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M4:test (default-test):执行目标 org.apache.maven 的默认测试.plugins:maven-surefire-plugin:3.0.0-M4:测试失败:插件org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M4或其依赖项之一无法解析:无法访问离线模式下的apache.snapshots ( http://repository.apache.org/snapshots/ ) 并且之前尚未从中下载工件 org.codehaus.plexus:plexus-utils:jar:1.1 。-> [帮助1]

(我启用了快照存储库,因为 maven-dependency-plugin 对于多模块项目存在严重问题)

POM 包括

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.0.0-M4</version>
                    <configuration>
                        <useSystemClassLoader>false</useSystemClassLoader>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
Run Code Online (Sandbox Code Playgroud)

如上所述,该插件本身在离线后确实存在于我的存储库中。

maven maven-dependency-plugin maven-surefire-plugin

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

所有有效的点组合,以最快(速度)有效的方式

我知道有很多关于生成元素组合的问题,但我认为这个问题有一些值得提出的新问题:

对于我的宠物项目,我要预先计算很多状态,以便以后改进应用程序的运行时行为.我挣扎的一个步骤是:

给定两个整数的N个元组(让我们从这里称它们为点,虽然它们不在我的用例中.但它们大致与X/Y相关)我需要计算给定规则的所有有效组合.

规则可能是这样的

  • "包含的每个点都排除了具有相同X坐标的所有其他点"
  • "包含的每个点都排除了具有奇数X坐标的每个其他点"

我希望并期望这一事实能够改善选拔过程,但我的数学技能只是在我打字时复活,我无法想出一个优雅的算法.

  • 点集(N)开始很小,但很快就会超过64(对于"长时间用作位掩码"解决方案)
  • 我在C#中这样做,但如果它解释了潜在的想法,任何语言的解决方案都应该没问题

谢谢.


更新以回应弗拉德的回答:

也许我想要概括这个问题的想法很糟糕.我上面的规则是在飞行中发明的,只是占位符.一个现实的规则看起来像这样:

  • "包括的每个点都排除了所选点之上的三角形中的每一个点"

根据该规则并选择(2,1)我将排除

  • (2,2) - 正上方
  • (1,3)(2,3)(3,3) - 下一行
  • 等等

所以规则是固定的,而不是一般的.遗憾的是,它们比我最初提供的X/Y样品更复杂.

c# algorithm combinations

6
推荐指数
1
解决办法
256
查看次数

通过散列来改进集合比较(过于聪明......?)

在我最后一次失败后,尝试在这里提出一个问题,这次我正在尝试一个更精确的问题:

是)我有的:

  1. 一个巨大的数据集(有限的,但我浪费了多天的多核处理时间来计算它......)ISet<Point>.
  2. 输入值列表,范围为0到2 n,n≤17

我需要的:

3)[1],[2]的表格,其中我将[2]的每个值映射到值[1]

处理:

对于这个计算,我有一个公式,它取一个位值(来自[2])和一组位置(来自[1])并创建一个新的ISet<Point>.我需要找出哪个原始集合等于结果集合(即"A7"表中的"单元格"可能指向"B").

天真的方式:

在[1]的值列表中计算new ISet<Point>和use .Contains(mySet)或类似的东西.我在此概念验证/宠物项目的先前版本中做到了这一点,当我开始提供大量数据时,它已经死了.是的,我使用了一个分析器.不,这不是系统中唯一缓慢的部分,但是我在这个天真的查找/映射中浪费了相当多的时间.

问题,最后:

由于我基本上只需要重新映射到输入,我考虑为列表创建一个散列值列表ISet<Point>,对我的处理结果做同样的事情,因此避免比较整个集合.

这是一个好主意吗?你会称之为过早的优化(我知道上面的天真的方式太慢了,但我应该先实现一些不那么聪明的东西吗?性能在这里非常重要,再想想运行时间)?任何其他建议,以缓解这里的burdon或想法我应该阅读?


更新:很抱歉没有提供更好的解释或样品.

[1]的样本(注意:这些是真正可能的数据点,但显然它是有限的):

new List<ISet<Point>>() {
  new HashSet() {new Point(0,0) },
  new HashSet() {new Point(0,0), new Point(2,1) },
  new HashSet() {new Point(0,1), new Point(3,1) }
}
Run Code Online (Sandbox Code Playgroud)

[2]只是长度为n的布尔矢量.对于n = 2,它是

  • 0,0
  • 0,1
  • 1,0
  • 1,1

基本上我可以使用int或long来做那个.

现在我有一个函数,它接受一个向量和一个ISet<Point>并返回一个新的ISet<Point>.这不是1:1的转换:一组5可能会导致一组11或其他.将所得的ISet<Point> 然而保证是输入的一部分.

使用字母表示位向量的一组点和数字,我从这开始

  A  B  C  D  E  F
1
2
3
4
5
6
7 …

c# optimization hash

6
推荐指数
1
解决办法
307
查看次数

Microsoft SQL Server:每天生成一个序列号

我的任务是每天为项目创建一个不断增加的序列号。多个进程(理论上在多台机器上)需要生成它。最终结果是

[date]_[number]
Run Code Online (Sandbox Code Playgroud)

喜欢

20101215_00000001
20101215_00000002
...
20101216_00000001
20101216_00000002
...
Run Code Online (Sandbox Code Playgroud)

由于我在这个项目中使用的是 SQL Server (2008),因此我尝试使用 T-SQL/SQL 魔法来完成此操作。这就是我现在所处的位置:

我创建了一个包含序列号的表,如下所示:

CREATE TABLE [dbo].[SequenceTable](
    [SequenceId] [bigint] IDENTITY(1,1) NOT NULL,
    [SequenceDate] [date] NOT NULL,
    [SequenceNumber] [int] NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的天真的解决方案是在插入后设置一个触发器,设置 SequenceNumber:

CREATE TRIGGER [dbo].[GenerateMessageId]
ON  [dbo].[SequenceTable] 
AFTER INSERT
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- The ID of the record we just inserted
DECLARE @InsertedId bigint;
SET @InsertedId = (SELECT …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sequence

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

继承最派生类型的抽象类

不幸的是,我找不到导致我这个问题的原始项目.这可能会给这个问题带来更多背景.

编辑:我发现原始项目我已经看到了这个:http://mews.codeplex.com/SourceControl/changeset/view/63120#1054567,具体实现在:http://mews.codeplex.com/SourceControl /变更/视图/ 63120#1054606

让我们说我有一个抽象类,具体实现了一些有用的东西:

abstract class AbstractClass
{
    public virtual int ConvertNumber(string number)
    {
        string preparedNumber = Prepare(number);
        int result = StringToInt32(number);
        return result;
    }

    protected abstract string Prepare(string number);

    protected virtual int StringToInt32(string number)
    {
        return Convert.ToInt32(number);
    }
}

sealed class ConcreteClass : AbstractClass
{
    protected override string Prepare(string number)
    {
        return number.Trim();
    }

    public override int ConvertNumber(string number)
    {
        return base.ConvertNumber(number);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是基本的.现在在我在网上看到的代码中,作者通过从最派生类型继承Abstract类来实现继承,例如:

abstract class AbstractGenericClass<TGenericClass>
    where TGenericClass …
Run Code Online (Sandbox Code Playgroud)

c# inheritance c#-4.0

5
推荐指数
1
解决办法
544
查看次数

来自命令/视图模型的 WPF DataGridView 键盘焦点

网络上充满了类似的问题,我也搜索了SO(最接近的:[1]、[2]、[3])。

到目前为止,我无法相信这个问题是如此丑陋/不平凡。

我有一个 DataGridView。我还有其他控件(在本例中:在 DataGridView 的列标题中)。我想支持快速“跳转到网格”命令。该命令需要将键盘焦点设置到网格,以便用户可以使用箭头键在行之间导航。

下面是在家玩的简单测试用例。在数据网格中选择一个元素非常容易,但似乎没有办法给它键盘焦点。除了代码隐藏操作之外,即使如此,您似乎也必须跳过障碍(请参阅[2],杂耍让单元格容器设置键盘焦点,因为..网格和行似乎并不适用于所有情况我可以告诉)。

看起来够简单吧?

一些简单的模型:

public class Item
{
    public int DayOfMonth { get; set; }
    public string Weekday { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

匹配简单的视图模型(假设您有一个 RelayCommand 实现,请参阅 JumpToGrid 了解 ~meat~):

public class MainViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private IList<Item> m_items;
    public IList<Item> SampleItems
    {
        get { return m_items; }
        set { SetField(ref m_items, value, () => SampleItems); }
    }

    private Item m_currentItem;
    public Item CurrentItem
    {
        get { return m_currentItem; }
        set { …
Run Code Online (Sandbox Code Playgroud)

.net wpf datagrid datagridview

3
推荐指数
1
解决办法
1210
查看次数

c#中的不安全图像噪声消除(错误:位图区域已被锁定)

public unsafe Bitmap  MedianFilter(Bitmap Img)
     {
        int Size =2;

        List<byte> R = new List<byte>();
        List<byte> G = new List<byte>();
        List<byte> B = new List<byte>();

        int ApetureMin = -(Size / 2);
        int ApetureMax = (Size / 2);

        BitmapData imageData = Img.LockBits(new Rectangle(0, 0, Img.Width, Img.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);

        byte* start = (byte*)imageData.Scan0.ToPointer ();
        for (int x = 0; x < imageData.Width; x++)
        {
            for (int y = 0; y < imageData.Height; y++)
            {
                for (int x1 = ApetureMin; x1 < ApetureMax; x1++) …
Run Code Online (Sandbox Code Playgroud)

c# filtering image-processing

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