小编Dav*_*001的帖子

如何比较可空类型?

我有几个地方需要比较2(可空)值,看看它们是否相同.

我认为框架中应该有一些东西可以支持这个,但找不到任何东西,所以请注意以下几点:

public static bool IsDifferentTo(this bool? x, bool? y)
{
    return (x.HasValue != y.HasValue) ? true : x.HasValue && x.Value != y.Value;
}
Run Code Online (Sandbox Code Playgroud)

然后,在我的代码中 if (x.IsDifferentTo(y)) ...

然后我有类似的可以为空的int,可空的双打等方法.

是否有更简单的方法来查看两个可空类型是否相同?

更新:

原来这个方法存在的原因是因为代码已经从VB.Net转换而来,其中Nothing = Nothing返回false(与C#相比,null == null返回true).应该使用VB.Net代码.Equals....

c# extension-methods nullable

58
推荐指数
6
解决办法
4万
查看次数

我应该有一个单独的接口程序集吗?

我们目前在一个项目中有很多类,每个类都实现一个接口,主要是出于DI的原因.

现在,我个人的感觉是这些接口应该放在同一个程序集中的一个单独的命名空间中(所以我们有一个MyCompany.CoolApp.DataAccess程序集,并且在其中有一个Interfaces命名空间给出 MyCompany.CoolApp.DataAccess.Interfaces).

但是,有人建议这些接口实际上应该在它们自己的程序集中.我的问题是 - 他们是对的吗?我可以看到有一些好处(例如,其他项目只需要使用接口程序集),但在一天结束时,所有这些程序集都需要加载.在我看来,可能会有一个稍微复杂的部署问题,因为Visual Studio不会自动将实现程序集拉入目标的bin文件夹.

是否有针对此的最佳实践指南?

编辑:

为了使我的观点更清楚:我们已经将UI,DataAccess,DataModel和其他东西分成不同的程序集.我们当前也可以毫不费力地将我们的实现换成不同的实现,因为我们使用Unity(IOC框架)将实现类映射到接口.我应该指出,除了多态性的原因和为单元测试创​​建模拟之外,我们从不编写同一接口的两个实现.因此,除了单元测试之外,我们目前没有"换出"实现.

我看到在与实现相同的程序集中使用接口的唯一缺点是将加载整个程序集(包括未使用的实现).

但是,我可以看到将它们放在不同的程序集中意味着开发人员不会意外地"新"实现类而不是使用IOC包装器创建它.

我从答案中无法理解的一点是部署问题.如果我只是依赖于接口程序集,我会有类似以下结构的东西:

MyCompany.MyApplication.WebUI
    References:
        MyCompany.MyApplication.Controllers.Interfaces
        MyCompany.MyApplication.Bindings.Interfaces
        etc...
Run Code Online (Sandbox Code Playgroud)

当我构建它时,自动放入bin文件夹的程序集就是那​​些接口程序集.但是,我在单元格中的类型映射将不同的接口映射到它们的实际实现.包含我的实现的程序集如何最终在bin文件夹中?

.net assemblies namespaces

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

如何处理Windows Phone 7上的后退按钮

在Windows Phone 7仿真器上,按下硬件后退按钮时,默认行为是关闭当前应用程序.我想覆盖此默认行为,以便导航到我的应用程序中的上一页.

经过一些研究,似乎应该可以通过覆盖OnBackKeyPress方法来实现这一点,如下所示:

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
    // do some stuff ...

    // cancel the navigation
    e.Cancel = true;
}
Run Code Online (Sandbox Code Playgroud)

但是,单击后退按钮仍会关闭我的应用程序.在上述方法上设置断点表明它永远不会被调用.我的应用程序退出代码上有另一个断点,并且此断点命中.

我需要做些什么才能拦截后退按钮?

windows-phone-7

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

检测到Windows Phone 7上是否显示了屏幕键盘

简单问题:如何检测到Windows Mobile 7上已显示屏幕键盘?是否有可以添加监听器的事件?

它占用了大约一半的屏幕,我想在显示时向上滚动视图...

编辑:

下面的评论更清楚地表明我正在尝试做什么:我有一个文本框输入,当用户输入时,它下面会出现一个自动完成下拉列表(如谷歌建议).默认情况下,活动控件(文本框)在聚焦时滚动到视图中,屏幕键盘直接在其下方.屏幕键盘出现在我的自动完成下拉列表前面 - 我想要做的是让屏幕向上滚动一点,所以我的下拉列表有一些空间可以显示.

Windows Phone UI设计指南说:"当部署键盘时,应用程序应滚动以确保活动的编辑控件和插入符号在视图中".这很好,只是非活动的下拉列表隐藏在屏幕键盘后面.

指南还说应用程序可以选择显示屏幕键盘,也可以选择关闭它.

目前我被卡住了,我不认为(基于我的研究和对这个问题的回复)可以检测到屏幕键盘已经显示.我移动我的调查,看它是否能够确定页面(宽度和高度,例如像素)的"可见区域",并与文本框的聚焦状态结合这个...不知道这是否会证明是富有成果虽然.

windows-phone-7

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

步行IQiberyable的NHibernate实体时带有消息"plan b"的Antlr异常

在尝试实现IQueryable我得到的表格时,我有一个非常奇怪的例外NHibernate.Linq.类型Antlr.Runtime.Tree.RewriteEmptyStreamException只是状态的例外,仅此plan b而已.有关详细的例外情况,请访问http://pastebin.com/kR2dvDHd

这是抛出异常的代码:

var matterExtractor = new MatterExtractor();
var InactiveMatters = matterExtractor.GetMattersAtStatus(General.InactiveMatterStatus);
Assert.IsNotNull(InactiveMatters); //OK
Assert.IsInstanceOfType(InactiveMatters, typeof (IQueryable<Matter>)); // OK
var MaterializedMatters = InactiveMatters.ToList(); //Exception is thrown
Run Code Online (Sandbox Code Playgroud)

Matter Extractor类就像下面这样简单:

public class MatterExtractor
{
    public virtual IQueryable<Matter> GetMattersAtStatus(MatterStatus status)
    {
        return
            (new NHibernateRepository.Repository<Matter>()).Where(
                m => m.MatterStatusHistories.OrderByDescending(msh => msh.CreateTime).FirstOrDefault().MatterStatus == status);
    }
}
Run Code Online (Sandbox Code Playgroud)

NHibernateRepository.Repository<T>是一个实用程序类,通过NHibernate.LINQ扩展方法实现IQueryable NHibernate.Session.这里没有具体的,但以防万一,这里是列表:http://pastebin.com/MgDxDg3Y

我不认为它与NHibernate映射有关,因为与Matter实体交互的其他测试运行得很好.很可能它与该Where条款有关,但我无法理解该条款出了什么问题.我试过更换

OrderByDescending(msh => msh.CreateTime).FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)

OrderBy(msh => msh.CreateTime).LastOrDefault() …
Run Code Online (Sandbox Code Playgroud)

c# linq nhibernate fluent-nhibernate

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

显示尾随零,除了整数

是否有一种方法(在.NET中)在使用时从数字中删除尾随零.ToString("..."),但如果数字不是整数,则显示为2位小数:

  1. (12345.00).ToString(...)应显示为12345
  2. (12345.10).ToString(...)应显示为12345.10
  3. (12345.12).ToString(...)应显示为12345.12

是否有1个数字格式字符串可以在所有这些场景中使用?

.ToString("#.##") 几乎可以工作,但没有显示方案2的尾随0 ...

此外,其他文化不是问题,我只想要小数点(不是逗号等)

.net c#

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

哪个平台开发基于网络的游戏?

我正在考虑编写一个新的基于网络的游戏,并想知道是否有人对我应该选择哪个平台有任何建议.

游戏将基于2D精灵,但需要保持一个不错的fps速率(一次最多可能有20件事情).它都将通过鼠标控制.

我每天都使用.NET,所以Silverlight对我来说似乎是一个自然的选择,但我想确保尽可能多的人可以玩它...

  • Silverlight游戏可以直接从Visual Studio开发(我有VS 2008),还是需要额外的软件(并且需要花费......)
  • Silverlight在.NET版本方面有什么限制(我可以使用.NET 3.5吗?)
  • 我可以使用哪些物理引擎?
  • Flash会是更好的选择吗?是否有免费的开发环境(有什么好处)?(我不在乎学习曲线)
  • Java仍然是一种选择吗?

所以我只是希望得到一些反馈,让我对一个简单的基于2D网页的游戏使用最好的东西.

编辑:

你能提供更多信息吗?这个单人/多人?什么样的流派?是否会涉及很多经典的UI(很多形式有很多按钮/复选框,数据网格等)?会有很多动画和特效吗?

  • 单人游戏,带有"攻击波"的敌人
  • 敌人只是移动的东西,玩家只需点击和点击
  • 没有经典的用户界面,只需点击按钮(没有列表/下拉列表等)
  • 最小的动画和效果,只有图形要求是敌人的移动(这需要很少的动画)

.net java flash silverlight .net-3.5

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

遍历F#2D阵列

我在F#中创建了一个棋盘(类型)游戏,并且在以"功能"方式遍历阵列时遇到了一些麻烦.

我有一个数组,看起来像,例如:

val myArray : int [,] = [[1; 1; 0; 0; 0]
                         [0; 0; 1; 0; 0]
                         [2; 0; 0; 0; 3]
                         [0; 0; 0; 0; 0]
                         [0; 1; 0; 0; 1]]
Run Code Online (Sandbox Code Playgroud)

我想根据上面的内容创建一个新数组,其中:

  1. 如果项目> 0,则在新数组中应为数字1
  2. 如果项目为= 0,则:
    1. 如果左侧或右侧或上方或下方的项目> 1,则在新阵列中该数字应为2
    2. 否则,如果右侧或上方或下方左侧的项目= 1,则在新阵列中该数字应为3
    3. 否则,数字应为4

这应该创建一个新的数组,如下所示:

val myArray : int [,] = [[1; 1; 3; 4; 4]
                         [2; 3; 1; 3; 2]
                         [1; 2; 3; 2; 1]
                         [2; 3; 4; 4; 2]
                         [3; 1; 3; 3; 1]]
Run Code Online (Sandbox Code Playgroud)

我无法在F#中看到实现这一目标的任何简单方法.在C#中,我只是创建了一个for循环来实现这一点,但我认为在F#中可能有一种偷偷摸摸的方式,使用像map函数这样的东西- …

f#

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

在SQL中查找最长的序列

如果我有一个包含日期的表格,例如(以年 - 月 - 日为时间格式):

2015-06-22 12:39:11.257
2015-06-22 15:44:46.790
2015-06-22 15:48:50.583
2015-06-23 08:25:50.060
2015-07-01 07:11:37.037
2015-07-07 13:40:11.997
2015-07-08 13:12:08.723
2015-07-08 13:12:13.900
2015-07-08 13:12:16.010
2015-07-10 12:29:59.777
2015-07-13 15:42:49.077
2015-07-13 15:47:48.670
2015-07-13 15:47:51.547
2015-07-14 08:11:53.023
2015-07-14 08:14:21.243
2015-07-14 08:16:49.410
2015-07-14 08:17:11.997
2015-07-14 09:58:28.840
2015-07-14 09:59:34.640
2015-07-15 15:39:39.993
2015-07-17 08:45:20.157
2015-07-24 14:00:00.487
2015-07-24 14:03:53.773
2015-07-24 14:12:41.717
2015-07-24 14:13:33.957
2015-07-24 14:15:40.953
2015-08-25 12:43:03.920
Run Code Online (Sandbox Code Playgroud)

...有没有办法(在SQL中)我可以找到最长的连续日子.我只需要总天数.所以在上面,有6月22日和6月23日的条目,所以序列有2天.还有7月13日,7月14日和7月15日的参赛作品; 这是最长的序列 - 3天.我不关心时间部分,所以在午夜之前输入一个条目,之后的条目将计为2天.

所以我想要一些可以查看表的SQL,并返回上面的值3.

t-sql sql-server

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

组织异步任务

我有三个任务A,B,C.

B必须在C之前运行,但A可以与它们并行运行.这是最近改变的逻辑,我们目前的逻辑工作正常,我只是想知道我们目前有什么更好的解决方案:

public void RunTasks(...) {
    Action<IRunnableTask> runner = task => 
    {
        if (task.ShouldRun(request))
        {
            task.Run(request, response);
        }
    };

    // run parallel tasks
    Parallel.ForEach(parallelTasks, runner);

    // run serial tasks
    Array.ForEach(serialTasks, runner);
}
Run Code Online (Sandbox Code Playgroud)

这里,A和B是并行任务,C在串行任务列表中.问题在于,代码将在C可以启动之前等待A完成,这是不必要的.

那么,有一个很好的清洁解决方案,还是我需要开始回调和什么?

.net c# task-parallel-library

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