小编Mat*_*hew的帖子

范围内的随机数,概率相等

这可能比C#更加数学相关,但我需要一个C#解决方案,所以我把它放在这里.

我的问题是关于随机数生成器的概率,更具体地说,如果以相等的概率返回每个可能的值.

我知道有Random.Next(int,int)方法,它返回第一个整数和最后一个之间的数字(最后一个是独占的).

Random.Next() [without overloads]将返回介于0和Int32.MaxValue(即2147483647)之间的值 - 1,所以2147483646.

如果我想要一个介于1和10之间的值,我可以打电话Random.Next(1, 11)来做这个,但是1到10之间的每个值都有相同的发生概率吗?

例如,范围是10,因此2147483646不能完全被10整除,因此值1-6具有稍高的发生概率(因为2147483646 % 10 = 6).这当然假设Random.Next()[无重载] 内的每个值以相等的概率返回介于0和2147483646之间的值.

如何确保范围内的每个数字具有相同的发生概率?让我们说一个彩票类型系统,对某些人来说比其他人有更高的可行性是不公平的,我不是说我会使用内置RNG的C#,我只是以它为例.

c# random range prng

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

解码所有HTML实体

我正在寻找一些能够解码大量HTML实体的函数.

原因是我正在研究一些代码来获取HTML内容并将其转换为纯文本,我遇到的问题是很多实体都没有使用转换HttpUtility.HtmlDecode.

我关注的实体的一些例子是&,&,©.

这是针对.net 3.5的.

c# asp.net html-entities

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

处理包含美元字符的正则表达式转义替换文本

string input = "Hello World!";
string pattern = "(World|Universe)";
string replacement = "$1";

string result = Regex.Replace(input, pattern, replacement);
Run Code Online (Sandbox Code Playgroud)

有了下面的例子,结果将是"Hello World!",当$1第一组被替换时(World|Universe),但是我想要的结果是"Hello $1!"

Regex.Escape方法旨在用于转义正则表达式模式,而不是替换,因为它可以转义其他字符,如斜杠和其他正则表达式模式字符.对我的问题的明显解决方法是让我的替换等于"$$1",并将实现"Hello $1!",但我想知道美元符号是否是我必须逃脱的唯一值(假设replacement用户生成,我不提前知道) ,还是有一个辅助功能,已经这样做了.

有没有人知道一个函数来逃避使用的替换值Regex.Replace(string input, string pattern, string replacement)

c# regex escaping

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

每个团队成员和分支的*.csproj/*.config设置不同

这个问题是二合一的,但两者都与同一个问题有关.

我们是由10个开发人员组成的团队,一些开发人员更喜欢使用IIS的完整实例,而其他开发人员更喜欢使用IIS-Express.使用其中任何一个都是值得的,例如,IIS最类似于生产,而IIS-Express允许编辑并继续调试.

除了10个开发人员工作团队,我们正在使用源代码控制,我们有一个分支结构.每个分支可能具有不同的web.config/app.config设置,例如数据库连接字符串.开发人员可能一次在多个分支上工作,因此我们通常每个分支都有一个数据库,我们正在查看具有本地数据库的开发人员,但无论采用何种方法,命名冲突仍然是一个问题(即开发人员可能有2个本地数据库,每个分支一个).

第一个问题是带有csproj文件的问题,特别是Web服务器设置.如果一个开发人员签入使用IIS-Express的csproj文件,而另一个开发人员执行Get Latest,则会覆盖他们的配置,浪费时间并造成挫败感.

当然,最简单的解决方案是强制每个人使用一个工具,一个配置,但我宁愿不这样做,特别是对于与结果输出无关的东西(编译代码).

第二个问题是配置文件,配置文件存储在源代码控制中(就像任何其他文件一样),因此当我们进行分支合并时,这些文件必须在之后手动更新.我知道有配置文件的调试和发布转换,我们可以在两者中都有不同的连接字符串,但这并不能解决两个开发人员可能在同一分支上工作但具有不同连接字符串的问题.

显而易见的解决方案是每个人总是拥有完全相同的设置,但是一些开发人员可能想要使用LocalDB实例,其他人可能想要使用SQL-Express,而登台服务器使用完整的SQLServer实例.同样,这是另一个与最终结果无关的设置.

在管理团队成员之间的配置以及分支/合并之间,我没有看到任何解决我的特定问题的方法.

.net c# version-control csproj visual-studio-2012

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

在C#中使用正则表达式匹配^ nb ^ nc ^ n(例如"aaabbbccc")

您可以轻松使用正则表达式来验证常规语言.我的问题是你能用它来验证一个上下文敏感的语言吗?现代正则表达式在层次结构中有多强大?

您将如何创建一个正则表达式来检查与^ nb ^ nc ^ n匹配的字符串?

以下情况应符合:

abc
aabbcc
aaabbbccc
Run Code Online (Sandbox Code Playgroud)

以下情况不符合:

abbc
aabbc
aabbbccc
Run Code Online (Sandbox Code Playgroud)

c# regex

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

Visual Studio开始构建之前的长时间延迟

我有一个包含50个项目的解决方案,每个项目至少有100个文件(我认为这是相关的).

问题是当我构建解决方案或单个项目时,在"构建输出"窗口被写入之前有5到10秒的延迟.将"构建输出"详细程度设置为"诊断"并不表示延迟的原因是什么.没有文件被更改(先前构建)时甚至会发生此延迟.

=== Build: 0 succeeded, 0 failed, 10 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

当有变化时,在构建输出中,它表示构建需要大约2秒才能完成,但端到端大约需要7到12秒.

构建输出:

1>(omitted)
1>Time Elapsed 00:00:01.99
========== Build: 1 succeeded, 0 failed, 9 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

的MSBuild:

Build succeeded.
     0 Warning(s)
     0 Error(s)

 Time Elapsed 00:00:02.17

 C:\Projects\SharedKernel.Tests>
Run Code Online (Sandbox Code Playgroud)

通过命令行运行MSBuild没有这样的延迟,2.17秒是按键盘完成的时间.

据我所知,msbuild任务本身在Visual Studio中快速执行,但似乎Visual Studio在msbuild任务启动之前在幕后做了一些导致这种延迟的事情.

当我检查的Visual Studio(devenv.exe的),虽然进程监视器,我注意到调用CreateFile,QueryDirectory以及CloseFile每个文件和文件夹的项目和项目的依赖.这似乎与查看时间表时的延迟相关.

如何减少从Visual Studio(右键单击项目>构建)开始构建构建过程到构建实际发生时的延迟?

我查看了以下答案以获得解决方案,但是它们要么不减少延迟,要么根本不适用:

.net c# msbuild visual-studio visual-studio-2012

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

Include和Where谓词导致左连接而不是内连接

使用以下表结构(删除了无关的列)

create table [Events]
(
    ID int not null identity,
    Name nvarchar(128) not null,
    constraint PK_Events primary key(ID)
)

create table [Donations]
(
    ID int not null identity,
    EventID int not null,
    Amount decimal(10, 2) not null,

    constraint PK_Donations primary key(ID),
    constraint FK_Donations_Events foreign key(EventID) references [Events](ID) on update no action on delete no action
)
Run Code Online (Sandbox Code Playgroud)

我使用以下Linq-to-Entities查询:

// 1
ents.Donations.Where(d => d.Amount > 25.0m && d.Event.Name.Contains("Run")).ToList();

// 2
ents.Donations.Include("Event").Where(d => d.Amount > 25.0m).ToList();

// 3
ents.Donations.Include("Event").Where(d => d.Amount > 25.0m …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-entities entity-framework

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

在切换到IIS8后删除连接时ASP.NET处理请求

我有一个使用WebForms的ASP.NET 3.5应用程序,目前它正在IIS6上托管.一切都很棒.

但是,在切换到安装了IIS8的Windows 2012服务器后,我们会间歇性地获取截断请求.大多数情况下,这在我们的事件日志中的视图状态异常中显示,但是,对于没有ViewState的表单,我们会得到不完整的帖子(最后几个字段缺失/部分截断).

这成了问题,我们升级到微软的支持,经过数周的调试,他们说这是II7及以上的"正确"行为.他们的解释是IIS管道从6改为7.

IIS6及以下版本会在将整个请求传递给Asp.net之前缓冲整个请求,截断的请求将被忽略.
IIS7及更高版本会在发送初始标头后将请求发送到Asp.net,它将由应用程序处理截断的请求.

当存在连接问题(用户在传输期间拔出电缆)或者用户在帖子期间按下停止/重新加载页面时,这会成为问题.

在我们的HTTP日志中,我们看到与截断的请求相关的"connection_dropped"消息.

我很难相信这种行为是有意的,但我们已经在几个不同的服务器上进行了测试,并在IIS7及更高版本(Windows 2008,2008 R2和2012)中获得了相同的结果.

我的问题是:

1)这种行为是否有意义?

2)如果这是"正确"的行为,您如何保护您的应用程序免于可能处理不完整的数据?

3)为什么应用程序开发人员有责任检测不完整的请求?假设,为什么app开发人员会处理不完整的请求而不是忽略它?

更新

我写了一个小的asp.net应用程序和网站来演示这个问题.

服务器

Handler.ashx.cs

public class Handler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        if (context.Request.HttpMethod == "POST")
        {
            var lengthString = context.Request.Form["Length"];
            var data = context.Request.Form["Data"];

            if (lengthString == null)
            {
                throw new Exception("Missing field: Length");
            }

            if (data == null)
            {
                throw new Exception("Missing field: Data");
            }

            var expectedLength = int.Parse(lengthString);

            if (data.Length != expectedLength)
            {
                throw new Exception(string.Format("Length expected: {0}, …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net iis webforms

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

MSBuild解决方案命令行输出到各个文件夹

目前,我有以下MSBuild命令:

msbuild 
    /t:Build 
    /p:Configuration=Release 
    /p:OutputPath=C:\MySolutionOutput\ 
    MySolution.sln
Run Code Online (Sandbox Code Playgroud)

但是,编译中我在我的解决方案中有多个项目.当我使用解决方案文件以这种方式构建时,它会将所有项目输出复制到同一目录,而Project2的输出会覆盖Project1的输出(或者它们内置的任何顺序).

相反,我希望MSBuild将每个项目放入项目名称的子文件夹中.

msbuild 
    /t:Build 
    /p:Configuration=Release 
    /p:OutputPath=C:\MySolutionOutput\$(ProjectName)
    MySolution.sln
Run Code Online (Sandbox Code Playgroud)

但是,$(ProjectName)语法不起作用,因为它字面上创建一个名为$(ProjectName)的文件夹.

如何使MSBuild解决方案构建输出每个项目到OutputPath的子目录,最好不制作MSBuild xml文件,或单独构建每个项目?

为了进一步说明,我的项目如下.

+ Project 1
    + File1.txt
    + File2.txt
    + ReadMe.txt

+ Project 2
    + File3.txt
    + File4.txt
    + ReadMe.txt     
Run Code Online (Sandbox Code Playgroud)

我的构建输出了什么

C:\MySolutionOutput\File1.txt
C:\MySolutionOutput\File2.txt
C:\MySolutionOutput\File3.txt
C:\MySolutionOutput\File4.txt
C:\MySolutionOutput\ReadMe.txt 
^-- (this is the 2nd readme, project 1's readme gets overwritten)
Run Code Online (Sandbox Code Playgroud)

我想要的是

C:\MySolutionOutput\Project 1\File1.txt
C:\MySolutionOutput\Project 1\File2.txt
C:\MySolutionOutput\Project 1\ReadMe.txt

C:\MySolutionOutput\Project 2\File3.txt
C:\MySolutionOutput\Project 2\File4.txt
C:\MySolutionOutput\Project 2\ReadMe.txt
Run Code Online (Sandbox Code Playgroud)

deployment msbuild visual-studio visual-studio-2012

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

使用域驱动设计与实体框架聚合根

我正在使用使用Entity Framework的Domain Driven Design构建应用程序.

我的目标是允许我的域模型(通过EF持久化)包含一些逻辑.

开箱即用,实体框架对于如何将实体添加到图形然后保持不变非常不受限制.

举例来说,我的域名为POCO(没有逻辑):

public class Organization
{
    private ICollection<Person> _people = new List<Person>(); 

    public int ID { get; set; }

    public string CompanyName { get; set; }

    public virtual ICollection<Person> People { get { return _people; } protected set { _people = value; } }
}

public class Person
{
    public int ID { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual Organization Organization { …
Run Code Online (Sandbox Code Playgroud)

c# domain-driven-design entity-framework aggregateroot

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