小编Les*_*ter的帖子

C#中的正则表达式组

我继承了一个包含以下正则表达式的代码块,我试图了解它是如何得到它的结果的.

var pattern = @"\[(.*?)\]";
var matches = Regex.Matches(user, pattern);
if (matches.Count > 0 && matches[0].Groups.Count > 1)
    ...
Run Code Online (Sandbox Code Playgroud)

输入user == "Josh Smith [jsmith]":

matches.Count == 1
matches[0].Value == "[jsmith]"
Run Code Online (Sandbox Code Playgroud)

......我明白了.但是之后:

matches[0].Groups.Count == 2
matches[0].Groups[0].Value == "[jsmith]"
matches[0].Groups[1].Value == "jsmith" <=== how?
Run Code Online (Sandbox Code Playgroud)

看着这个问题从我了解的群体集合存储在整场比赛以及之前的比赛.但是,上面的正则表达式是否只与[空方括号] [文本] [关闭方括号]匹配,那么为什么"jsmith"会匹配?

此外,群组集合是否总是存储2组:整场比赛和最后一场比赛?

c# regex

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

LINQ - 方法与查询语法的区别

我正在使用DataTable并注意到Resharper建议我可以将循环转换为LINQ表达式.我这样做了,它在查询表达式语法(简化)中重写:

var test1 = from DataRow row in dt.Rows select row;
Run Code Online (Sandbox Code Playgroud)

就个人而言,我更喜欢方法语法,所以重写它:

var test2 = dt.Rows.Select(row => row);
Run Code Online (Sandbox Code Playgroud)

它打破了.

'System.Data.DataRowCollection'不包含'Select'的定义,也没有扩展方法'Select'接受类型为'System.Data.DataRowCollection'的第一个参数'(你是否缺少using指令或程序集引用) ?)

由于查询表达式被转换为方法调用,为什么第一个工作但不是第二个?我希望两者都可以或者两者都不工作,这显然不是这样.

c# linq linq-query-syntax linq-method-syntax

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

AppFabric缓存群集 - 无法启动第二个主机

我在使用2台主机运行AppFabric群集时遇到了问题.我已经验证它只适用于1个主机(即,当我浏览Web应用程序时缓存项目数量增加),但是当我尝试将第二个主机加入群集时,我得到以下异常:

Failed to read remote registry key from host 289851-cache2: 
Microsoft.ApplicationServer.Caching.DataCacheException: 
ErrorCode<ERRCAdmin026>:SubStatus<ES0001>:Remote registry access failed on host 289851-cache2.
Check if the required permissions are available. ---> System.IO.IOException: The network path was not found.

    at Microsoft.Win32.RegistryKey.Win32ErrorStatic(Int32 errorCode, String str)

    at Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(RegistryHive hKey, String machineName, RegistryView view)

    at Microsoft.ApplicationServer.Caching.AdminApi.CacheAdmin.GetRemoteRegistryKey(String hostName, Boolean writable)

    --- End of inner exception stack trace ---

    at Microsoft.ApplicationServer.Caching.AdminApi.CacheAdmin.GetRemoteRegistryKey(String hostName, Boolean writable)

    at Microsoft.ApplicationServer.Caching.AdminApi.CacheAdmin.GetServerVersion(String 

hostName),DistributedCache.CacheAdmin,Error
Run Code Online (Sandbox Code Playgroud)

其中289851-cache2是第二个主机的名称.

即使异常表示检查权限,我已将缓存连接帐户更改为我的域帐户并在任何地方授予访问权限 - 该帐户在两台AppFabric主机上都是管理员,具有对网络共享的完全访问权限,并且我运行AppFabric PowerShell作为管理员.但是在我运行Start-CacheCluster之后,第一个主机的状态为UP,而第二个主机的状态为STARTING无限期.我需要重新启动机器才能执行任何其他操作,因为即使通过任务管理器或控制面板中的服务,它也不会让我停止,启动或终止进程.

我们运行Windows Server 2008 64位,安装了WindowsServerAppFabricSetup_x64_6.0(因为我认为需要Windows Server 2008 R2,而不是6.1,因为配置存储在网络共享上).

主机1的DistributedCacheAgent.config:

  <host …
Run Code Online (Sandbox Code Playgroud)

cluster-computing appfabric

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

按范围定义常量

我一直习惯在课堂上定义常量:

public class MyClass
{
    private const int SomeNumber = 10;
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,我最近与一个认为如果常量仅由特定方法使用的人合作,那么应该在该方法中定义:

public class MyClass
{
    public void SomeMethod()
    {
        const int SomeNumber = 10;
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我唯一更喜欢第一个的理由是,如果在其他方法中需要常量,则不需要重构,并且它更容易更新常量,因为它们将在同一个地方定义.

还有其他优点/缺点或没有真正的区别吗?

c# constants

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