我有一个演示者类,它附加了注入视图的事件.现在我想测试演示者对事件的正确反应.
这是视图界面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) 所以我真正想要的是在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) 我的简单要求:读取一个巨大的(>一百万)行测试文件(对于这个例子假设它是某种类型的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)偏移量的方法是什么?没什么大不了的,真的,我只是不喜欢建造可能存在的东西......
对于一个宠物项目,我开始摆弄ANTLR.在完成一些教程后,我现在正在尝试为我自己的语言创建语法并生成AST.
现在我主要在ANTLRWorks中乱搞,但现在我已经验证了解析树看起来很好我想(迭代地,因为我还在学习并且仍然需要对最终结构做出一些决定)树)创建AST.似乎antlrworks不会将其可视化(或者至少不使用"Interpreter"功能,Debug不能在我的任何机器上运行).
底线:是以手动方式可视化AST的唯一方法,遍历/显示它还是以字符串表示形式将树打印到控制台?
我正在寻找的是从输入,语法 - >视觉AST表示到ANTLRWorks的"解释器"功能的简单方法.有任何想法吗?
我现在不得不放弃这个纯粹的学术问题,但我非常希望能在近期看到解决方案.
由于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) 我正在尝试在 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)
如上所述,该插件本身在离线后确实存在于我的存储库中。
我知道有很多关于生成元素组合的问题,但我认为这个问题有一些值得提出的新问题:
对于我的宠物项目,我要预先计算很多状态,以便以后改进应用程序的运行时行为.我挣扎的一个步骤是:
给定两个整数的N个元组(让我们从这里称它们为点,虽然它们不在我的用例中.但它们大致与X/Y相关)我需要计算给定规则的所有有效组合.
规则可能是这样的
我希望并期望这一事实能够改善选拔过程,但我的数学技能只是在我打字时复活,我无法想出一个优雅的算法.
谢谢.
更新以回应弗拉德的回答:
也许我想要概括这个问题的想法很糟糕.我上面的规则是在飞行中发明的,只是占位符.一个现实的规则看起来像这样:
根据该规则并选择(2,1)我将排除
所以规则是固定的,而不是一般的.遗憾的是,它们比我最初提供的X/Y样品更复杂.
在我最后一次失败后,尝试在这里提出一个问题,这次我正在尝试一个更精确的问题:
是)我有的:
ISet<Point>.我需要的:
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,它是
基本上我可以使用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 …
我的任务是每天为项目创建一个不断增加的序列号。多个进程(理论上在多台机器上)需要生成它。最终结果是
[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) 不幸的是,我找不到导致我这个问题的原始项目.这可能会给这个问题带来更多背景.
编辑:我发现原始项目我已经看到了这个: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) 网络上充满了类似的问题,我也搜索了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) 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# ×9
.net ×2
algorithm ×1
android ×1
antlr ×1
antlrworks ×1
c#-4.0 ×1
combinations ×1
datagrid ×1
datagridview ×1
filtering ×1
hash ×1
inheritance ×1
maven ×1
moq ×1
multi-touch ×1
offset ×1
optimization ×1
powershell ×1
sequence ×1
sql ×1
sql-server ×1
t-sql ×1
tdd ×1
text-files ×1
wpf ×1