小编wis*_*ter的帖子

使HashSet <string>不区分大小写

我有HashSet参数的方法.我需要在其中做不区分大小写的包含:

public void DoSomething(HashSet<string> set, string item)
{
    var x = set.Contains(item);
    ... 
}
Run Code Online (Sandbox Code Playgroud)

是否可以使现有的HashSet不区分大小写(不创建新的)?

我正在寻找具有最佳性能的解决方案.

编辑

包含可以多次调用.因此,由于性能低于本机HashSet Contains方法,IEnumerable扩展对我来说是不可接受的.

既然,回答我的问题是NO,那是不可能的,我已经创建并使用了以下方法:

public HashSet<string> EnsureCaseInsensitive(HashSet<string> set)
{
    return set.Comparer == StringComparer.OrdinalIgnoreCase
           ? set
           : new HashSet<string>(set, StringComparer.OrdinalIgnoreCase);
}
Run Code Online (Sandbox Code Playgroud)

.net c# hashset

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

如何返回更具体的HTTP代码(如401.X)

是一篇关于一些扩展HTTP代码的文章:

IIS 7.0,IIS 7.5和IIS 8.0定义了几个HTTP状态代码,指示401错误的更具体原因.以下特定HTTP状态代码显示在客户端浏览器中,但不显示在IIS日志中:

  • 401.1 - 登录失败.
  • 401.2 - 由于服务器配置登录失败.
  • 401.3 - 由于资源上的ACL而未经授权.
  • 401.4 - 过滤器授权失败.
  • 401.5 - ISAPI/CGI应用程序授权失败.

我需要一些自定义扩展HTTP代码,如下所示:

  • 401.10 - 找不到用户
  • 401.11 - 用户密码不匹配
  • 401.12 - 用户帐户被锁定
  • 401.13 - 用户帐户已过期
  • ...

如何从.NET MVC应用程序返回这些扩展的401错误代码?

c# asp.net-mvc

18
推荐指数
3
解决办法
2919
查看次数

JSON.NET:在反序列化时处理的未知成员

我正在使用JSON进行数据交换.我正在使用JSON.NET框架.

我上课了:

public class CarEntity
{
    public string Model { get; set; }
    public int Year { get; set; }
    public int Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有以下代码:

public void Test()
{
    var jsonString = 
    @"{
      ""Model"": ""Dodge Caliber"",
      ""Year"": 2011,
      ""Price"": 15000,
      ""Mileage"": 35000
    }";
    var parsed = (CarEntity)JsonConvert.DeserializeObject(jsonString, typeof(CarEntity));
}
Run Code Online (Sandbox Code Playgroud)

由于CarEntity类中没有"里程"字段,因此需要对其进行日志警告:

未知字段:里程= 35000

有办法吗?

c# json json.net

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

如何用Moq制作可验证的所有方法

为了验证该方法是否被调用,我们应该使这个方法可以验证:

// arrange
mock
    .Setup(foo => foo.SomeMethod("param1", "param2", "param3", "param4"))
    .Verifiable();
Run Code Online (Sandbox Code Playgroud)

然后我们可以这样做:

// assert
mock
    .Verify(foo => foo.SomeMethod("param1", "param2", "param3", "param4"));
Run Code Online (Sandbox Code Playgroud)

我想避免这个重复的代码...在复杂测试的情况下,代码变得过载且不可读.

所以我的问题是如何在排列部分中制作可验证的所有方法(带有任何参数)?

注意

我知道VerifyAll():

// assert
mock.VerifyAll();
Run Code Online (Sandbox Code Playgroud)

但它有一个缺点:实际验证的是不明显的.所以我正在寻找一些替代方案.

c# nunit unit-testing moq

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

如果多次调用,Concat会导致堆栈溢出

应用程序意外崩溃,堆栈溢出错误.经过研究,我发现崩溃的原因是遵循以下代码:

foreach (var item in items)
{
    result = result.Concat(item.Data);
}
Run Code Online (Sandbox Code Playgroud)

这是多个IEnumerables的连接.应用程序在items包含10,000个元素时崩溃.

SelectMany解决了这个问题.但还是......

为什么Concat扩展导致堆栈溢出?

.net c# linq stack-overflow concatenation

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