小编das*_*dot的帖子

如何检查默认的DateTime值?

我需要检查一个DateTime值是否有值.

我有几个选择:

if (dateTime == default(DateTime))
Run Code Online (Sandbox Code Playgroud)

要么

if (dateTime == DateTime.MinValue)
Run Code Online (Sandbox Code Playgroud)

或使用可空的 DateTime?

if (nullableDateTime.HasValue)
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢第三个版本,因为它的可读性非常好.但是在我们的数据库中,我们有一些datetime列,它们被定义为非null.所以在某些情况下我必须选择前两个选项.

我在某处读到了在default使用泛型时应该使用该关键字,但在这种情况下它是否更具可读性?当使用第二个选项时,我必须知道新的和空的DateTime实例的默认值是DateTime.MinValue,它具有我的实现细节的气味.

那么我应该使用哪个选项来使用"最佳实践"?

.net c# design-patterns

50
推荐指数
3
解决办法
7万
查看次数

Selenium WebDriver偶尔会抛出超时异常

使用硒对我们的项目进行ui测试.我们正在运行最新版本2.30.0.我们使用Firefox WebDriver并运行Firefox 19.0.

一般来说,当我在Visual Studio中运行ui测试时,ui测试在本地甚至服务器端工作.我们的ui测试在我们的构建服务器上得到了很好的执行.它在我通过Visual Studio手动测试的同一台服务器上使用相同的部署.

但是偶尔我们在构建服务器上执行ui测试时会遇到以下问题:

Test(s) failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL http://localhost:7056/hub/session/bed1d0e7-efdc-46b6-ba07-34903519c44d/element/%7B8717bb19-96c7-44d3-b0ee-d4b989ae652d%7D/click timed out after 60 seconds.
      ----> System.Net.WebException : The operation has timed out
       at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
       at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
Run Code Online (Sandbox Code Playgroud)

基本上,测试点击上传按钮,其中输入字段之前填充了文件.由于文件非常小,因此可在几秒钟内完成.然而,有时达到60秒的时间.

任何想法如何隔离潜在的问题?或者之前让任何人遇到同样的问题?任何提示赞赏.谢谢.

.net c# testing selenium webdriver

38
推荐指数
3
解决办法
4万
查看次数

在NLog中缓冲日志消息并手动将它们刷新到目标

我试图通过NLog MailTarget登录.它运行得很好,但我想用mail BufferedTargetWrapper缓冲日志消息包装mailtarget,直到预定义的代码点,我想手动刷新缓冲区并通过单个邮件发送当前缓冲的日志消息(如邮件目标中定义的那样) ).

如果我定义FlushTimeoutBufferSize在的BufferedTargetWrapper一切,应该还是工作得很好.但是如果没有设置FlushTimeout和BufferSize,我就无法使它工作.

就像在SO Force BufferingTargetWrapper上的这个问题中回答的那样,我没有这样的东西:

 LogManager.Configuration.AllTargets.Where(t => t != null && t is BufferingTargetWrapper).ToList().
            ForEach(b => ((BufferingTargetWrapper)b).Flush(null));
Run Code Online (Sandbox Code Playgroud)

但是文档和这个答案与我的NLog版本(2.0.0.2000)相矛盾.没有参数的flush方法,只有异步目标的flush方法.

有没有办法强制BufferingTargetWrapper将所有记录的消息刷新到包装目标(通过邮件发送)?

c# logging nlog buffering wrapper

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

如何修改KendoUI DropDownList项目

我们第一次使用Kendo UI DropDownList而没有敲除绑定.通过jquery,通常的html输入被转换为KendoUI DropDownList.但是如何删除/编辑/添加选项?

如果我通过jquery修改html输入选项,它对kendoui下拉列表没有影响 - 即使之后有刷新调用.

任何想法如何做到这一点?谢谢

javascript asp.net-mvc jquery kendo-ui

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

如何通过用户代理检测iOS 6和所有次要版本?

如何使用简单的正则表达式或其他东西通过用户代理检测iOS 6和所有次要版本?也很好区分iphone和ipad.


这个问题与什么是iOS 6用户代理字符串不同?因为我想根据我已经知道的信息(可以在链接的问题中找到)帮助构建正则表达式

regex user-agent ios ios6

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

EF迁移中的自定义代码执行

在我们的项目中成功使用实体框架迁移.但是现在我遇到了一个特殊情况,我需要更新一个需要一些业务逻辑的表(在我们的应用程序中作为C#代码).因此,我尝试在迁移Up方法中生成一个线程,并使用业务逻辑执行此表更新.应用程序执行不需要此表更新,应在后台进行.

我这样做有点像这样:

public partial class MyMigration : DbMigration
{
  public override void Up()
  {
     // ... do some sql migration here ...

     // after executing the sql migrations custommethod should run
     // migration seems to wait until CustomMethod finished work
     new Thread(() => ExecuteCustomMethodDatabaseContext()).Start();
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望该Up方法在启动线程后返回,EF将MigrationHistory中的迁移设置为完成.因此,应用程序可以启动,并在后台的某个地方更新表.

但事实并非如此,迁移似乎在线程运行时运行(这需要很多时间).

所以我的问题是:

  1. 一般来说,在DBmigrations中执行自定义代码是一种好习惯吗?
  2. 如果没有,我怎样才能在我的情况下完成自定义代码执行的需要?(没有重写存储过程中的业务逻辑或某种程度上)
  3. 如果是的话,我做错了什么?如何在迁移中执行此代码而不阻止它?

.net c# migration entity-framework ef-code-first

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

使用JSON.NET一次序列化一组对象

我尝试将多个项目序列化为json,并将其格式化为数组。

它是基于事件的,因为它的大量数据无法作为一个整体收集在内存中。但是我需要将每个项目序列化为一个文件,并将其格式化为数组。

_jsonWriter = new JsonTextWriter(new StreamWriter("Output.json")));
DataGatherer.ItemGathered += item =>
{
    _jsonSerializer.Serialize(_jsonWriter, item);
    _jsonWriter.Flush();
};
Run Code Online (Sandbox Code Playgroud)

当前,此输出如下:

{
  "Id": 218515,
  "Name": "A"
}{
  "Id": 118647,
  "Name": "B"
}
Run Code Online (Sandbox Code Playgroud)

由于序列化程序将每个项目序列化为一个对象,因此不知道其数组。

因此,我如何告诉JSON.Net序列化程序将每个项目作为数组的一个项目进行处理,并格式化数据,如下所示:

[{ "Id": 218515, "Name": "A"},{"Id": 118647,"Name": "B"}]
Run Code Online (Sandbox Code Playgroud)

感谢您的提示!

.net javascript c# json json.net

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

可选注入当前用户的最佳实践

在我们的ASP.NET MVC项目中,我们使用Ninject来解析控制器所需的依赖项.

其中一个依赖项是当前用户HttpContext.Current.User.Identity.如果用户经过身份验证,我们希望实例化一个用户对象和几个依赖它的服务.但我们不想手动执行此操作,而是让ninject将这些实例注入控制器.

所以我们现在遇到了麻烦,因为当然可以找到一个url而不进行身份验证.然后ninject尝试在asp.net重定向到登录页面之前解析实例.

我可以想到解决方案,我们配置ninject只是在用户通过身份验证时注入:

kernel.Bind<User>().ToMethod(GetUser).When(context => HttpContext.Current.User.Identity.IsAuthenticated).InRequestScope();
Run Code Online (Sandbox Code Playgroud)

这里的问题是,即使用户未经过身份验证,ninject也会实例化一个默认对象,因此无论如何我的服务都会崩溃或需要检查实例.空检查会让我更容易接受,但我不想激活AllowNullInjectionNinject的设置.

所以我的问题是做有条件的事情的最佳做法是什么?我可以在这些情况下使用Ninject功能,还是不应该注入这些依赖项?

.net c# asp.net-mvc dependency-injection ninject

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

如何处理阻塞同步外部DLL方法

最近我使用外部DLL库,我对它没有任何影响.在某些特殊情况下,此第三方dll的方法是阻塞并且永不返回.

我试图通过在新的AppDomain中执行此方法来解决此问题.在自定义超时后,我想卸载AppDomain并杀死所有这些垃圾;)

不幸的是,它不起作用 - 正如有人所期望的那样.

一段时间后,它会抛出CannotUnloadAppDomainException,因为阻塞方法不允许正常中止线程.

我依赖于使用这个库,似乎不会很快有更新.

那么我可以解决这个问题,即使这不是最佳做法吗?任何糟糕的黑客赞赏:)

.net c# com parallel-processing appdomain

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