小编Jod*_*ell的帖子

如何在C#中创建具有整数序列的数组?

F#有序列,它允许创建序列:

seq { 0 .. 10 }
Run Code Online (Sandbox Code Playgroud)

创建0到10之间的数字序列.

C#中有类似的东西吗?

.net c# f# sequence

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

新DLL地狱; 错误的程序集版本被绑定

我正在使用Nuget v 2.8.50313.46运行VS2013更新1

你可以跳到这是重要的一点,以及一些最近的更新,并回来参考.

我有一个VS解决方案,这是它的简化表示.

-- Solution
    - Base (Class Library)
        Packages:
            No Packages Installed.
        References:
            System
            System.Configuration
            System.Core
            System.Runtime.Caching
            System.Web

    - AppBase (Class Library)
        Packages:
            No Packages Installed.
        References:
            System
            System.Core
            System.Web.Http
            Base

    - Client (Console Application)
        Packages:
            EntityFramework                v6.1.0
            HtmlAgilityPack                v1.4.6
        References:
            EntityFramework
            EntityFramework.SqlServer
            HtmlAgilityPack
            System
            System.Core
            AppBase
            Base

    - Server (Web Application)
        Packages:
            HtmlAgilityPack                v1.4.6
            Microsoft.AspNet.WebApi        v5.1.2
            Microsoft.AspNet.WebApi.Client v5.1.2
                (dependent on > Newtonsoft.Json v4.5.0)
            Microsoft.AspNet.WebApi.Web... v5.1.2
            Newtonsoft.Json                v6.0.3
        References:
            HtmlAgilityPack
            Newtonsoft.Json
            System
            System.Net.Http
            System.Net.Http.Formatting
            System.Web …
Run Code Online (Sandbox Code Playgroud)

c# json.net nuget visual-studio-2013

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

如何将TextBlock绑定到包含格式化文本的资源?

我的WPF窗口中有一个TextBlock.

 <TextBlock>
     Some <Bold>formatted</Bold> text.
 </TextBlock>
Run Code Online (Sandbox Code Playgroud)

渲染时它看起来像这样,

一些格式化文本.

我的问题是,我可以将此内联"内容"绑定到我的应用程序中的资源吗?

我得到了:

制作应用程序资源字符串,

myText="Some <Bold>formatted</Bold> text."
Run Code Online (Sandbox Code Playgroud)

和以下xaml(为简洁起见,省略了一些代码)

 <Window xmlns:props="clr-namespace:MyApp.Properties">
     <Window.Resources>
         <props:Resources x:Key="Resources"/>
     </Window.Resources>
      <TextBlock x:Name="Try1" 
          Text="{Binding Source={StaticResource Resources} Path=myText}"/>
     <TextBlock x:Name="Try2">
          <Binding Source="{StaticResource Resources}" Path="myText" />
     </TextBlock>
 </Window>
Run Code Online (Sandbox Code Playgroud)

Try1呈现标签并且不影响格式.

一些<Bold>格式化的<Bold>文本.

Try2不会编译或渲染,因为资源"myText"不是Inline类型而是字符串.

这看似简单的任务是否可能,如果可行,怎么办?

wpf resources xaml binding textblock

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

具有代码优先模型的"可组合"全文搜索

更新 2013年9月18日

看起来没有一种简单的方法可以做到这一点.我正在坚持一个涉及对Entity Framework进行一些扩展的解决方案.

如果您想在实体框架中看到这些功能,请在用户语音网站上投票,也许在此处此处


关于SO有几个类似的问题,但我找不到一个新问题和类似问题,足以得到我正在寻找的答案.

如果这看起来像信息过载,请跳到In Summary.

背景

我正在编写WebApi REST服务,以通过OData端点公开一些预先存在的数据.我正在使用它EntitySetContoller<TEntity, TKey>为我做所有的咕噜咕噜的工作.除了由基类路由和转换的标准OData参数之外,我还添加了一些自定义参数,以允许我的控制器使用特定功能.

我的数据库服务器是MS SQL Server [BigText] NVarChar[4000],在[SomeEntity]表的列上有一个全文索引.

我有一个限制,我必须使用Code First模型.

// Model POCO
public class SomeEntity
{
    public int Id { get; set; }
    public string BigText { get; set; }
}

// Simple Controller
public class SomeEntityController : EntitySetController<SomeEntity, int>
{
    private readonly SomeDbContext context = new SomeDbContext();

    public override IQueryable<SomeEntity> Get()
    {
        var parameters …
Run Code Online (Sandbox Code Playgroud)

.net c# full-text-search entity-framework

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

IEqualityComparer正在调用GetHashCode但是Equals not

我有两个列表,我想比较.所以我创建了一个实现IEqualityComparer接口的类,请参见下面的代码底部.

当我单步GetHashCode执行代码时,代码会通过我的实现而不是EqualsGetHashCode尽管在互联网上阅读以及它到底在做什么,但我并不真正理解这种方法.

List<FactorPayoffs> missingfactorPayoffList = 
    factorPayoffList.Except(
        factorPayoffListOrg,
        new FactorPayoffs.Comparer()).ToList();

List<FactorPayoffs> missingfactorPayoffListOrg =
    factorPayoffListOrg.Except(
        factorPayoffList,
        new FactorPayoffs.Comparer()).ToList();
Run Code Online (Sandbox Code Playgroud)

所以在上面的两行代码中,两个列表返回每个项目,告诉我这两个列表不包含任何相同的项目.事实并非如此,只有不同的行.我猜这种情况正在发生,因为该Equals方法没有被调用,这反过来让我想知道我的GetHashCode方法是否正常运作?

class FactorPayoffs
    {
        public string FactorGroup { get; set; }
        public string Factor { get; set; }
        public DateTime dtPrice { get; set; }
        public DateTime dtPrice_e { get; set; }
        public double Ret_USD { get; set; }

        public class Comparer : IEqualityComparer<FactorPayoffs>
        {
            public bool Equals(FactorPayoffs x, FactorPayoffs y)
            { …
Run Code Online (Sandbox Code Playgroud)

c#

14
推荐指数
3
解决办法
6784
查看次数

使用前缀,后缀和分隔符连接字符串的最快方法

UPDATE

按照奶酪先生的回答,似乎是

public static string Join<T>(string separator, IEnumerable<T> values)
Run Code Online (Sandbox Code Playgroud)

超载string.Join从使用StringBuilderCache类中获得优势.

有没有人对本声明的正确性或原因有任何反馈意见?

我可以写自己的,

public static string Join<T>(
    string separator,
    string prefix,
    string suffix,
    IEnumerable<T> values)
Run Code Online (Sandbox Code Playgroud)

使用StringBuilderCache该类的函数?


在提交了我对这个问题的答案后,我得到了一些分析,其中哪个是最佳表现的答案.

我在控制台Program类中编写了这段代码来测试我的想法.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;

class Program
{
    static void Main()
    {
        const string delimiter = ",";
        const string prefix = "[";
        const string suffix = "]";
        const int iterations = 1000000;

        var sequence = Enumerable.Range(1, …
Run Code Online (Sandbox Code Playgroud)

.net c# string

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

如何在许多项目中配置Roslyn Analyzers?

我想在组织中强制执行代码质量和一致的样式。

为此,我计划将Roslyn AnalyzersStyleCop添加到我的项目中。

为了满足我们公认的编码标准,这些分析仪将需要其他配置。理想情况下,将使用.editorconfig进行此类配置,否则,将使用规则集进行配置

在我的组织中,我们在许多存储库中都有许多项目,许多解决方案。我想尽可能广泛地执行这些标准。我不想将所有分析器软件包和配置都添加到每个项目中,是否有更好,更容易,更容易保持一致的方式来实现这一目标?

我有一个想法,我可以为我的组织制作一个NuGet软件包,其中包含我组织的选定分析器,任何配置以及实际上可能创建的任何自定义分析器。该“捆绑”包可以添加到每个项目中,避免了繁琐且容易出错的重复。这可能吗,甚至是个好主意吗?有人做过吗?

c# stylecop roslyn .net-core

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

如何批量使用BlockingCollection <T>

我想出了一些代码来消耗队列中所有的wating项目.而不是逐项处理项目,将所有等待项目作为一组处理是有意义的.

我已经宣布我的队列是这样的.

private BlockingCollection<Item> items = 
    new BlockingCollection<Item>(new ConcurrentQueue<Item>);
Run Code Online (Sandbox Code Playgroud)

然后,在消费者线程上,我打算像这样批量阅读这些项目,

Item nextItem;
while (this.items.TryTake(out nextItem, -1))
{
    var workToDo = new List<Item>();
    workToDo.Add(nextItem);

    while(this.items.TryTake(out nextItem))
    {
        workToDo.Add(nextItem);
    }

    // process workToDo, then go back to the queue.
}
Run Code Online (Sandbox Code Playgroud)

这种方法缺乏实用性,GetConsumingEnumerable我不禁想知道我是否错过了更好的方法,或者我的方法是否存在缺陷.

有没有更好的方法来BlockingCollection<T>批量消费?

.net c# concurrency

12
推荐指数
2
解决办法
2249
查看次数

字符串ctor是将IEnumerable <char>转换为字符串的最快方法

编辑发布.Net Core 2.1

重复测试.Net Core 2.1的发布,我得到这样的结果

"Concat"的1000000次迭代耗时842ms.

"新字符串"的1000000次迭代耗时1009ms.

"sb"的1000000次迭代耗时902ms.

简而言之,如果您使用.Net Core 2.1或更高版本,Concat则为王.


编辑了这个问题,以纳入评论中提出的有效点.


我正在思考我对前一个问题的回答,我开始怀疑,是这样,

return new string(charSequence.ToArray());
Run Code Online (Sandbox Code Playgroud)

IEnumerable<char>a 转换为a 的最佳方法string.我做了一点搜索,发现这里已经提出这个问题.那个答案断言,

string.Concat(charSequence)
Run Code Online (Sandbox Code Playgroud)

是一个更好的选择.在回答这个问题后,StringBuilder还提出了一种列举方法,

var sb = new StringBuilder();
foreach (var c in chars)
{
    sb.Append(c);
}

return sb.ToString();
Run Code Online (Sandbox Code Playgroud)

虽然这可能有点笨拙但我把它包括在内是为了完整性.我决定我应该做一点测试,使用的代码在底部.

当在发布模式下构建时,通过优化,并在没有附加调试器的情况下从命令行运行,我得到这样的结果.

"Concat"的1000000次迭代耗时1597ms.

"新字符串"的1000000次迭代耗时869ms.

"sb"的1000000次迭代耗时748ms.

据我估算,它的new string(...ToArray())速度接近该string.Concat方法的两倍.该StringBuilder是稍快,但仍然是尴尬使用,但可能会延长.

我应该坚持,new string(...ToArray())还是有什么我想念的?

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;

class Program …
Run Code Online (Sandbox Code Playgroud)

c# performance

8
推荐指数
2
解决办法
1455
查看次数

Sql Server选择datetime而不是秒

我有以下日期时间列值

2015-01-04 20:37:00.000
Run Code Online (Sandbox Code Playgroud)

我在下面试过

cast(cast(MyDateColumn as date) as datetime)+cast(datepart(hour,MyDateColumn ) as float)/24
as MyDateColumn 
Run Code Online (Sandbox Code Playgroud)

CAST(CONVERT(CHAR(16),MyDateColumn,113) AS datetime) as MyDateColumn
Run Code Online (Sandbox Code Playgroud)

这些对我不起作用

我怎样才能在01-04.2015 20:37之上达到日期时间

sql sql-server datetime

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