小编Tru*_*ill的帖子

Select-String to grep但只返回唯一的组

我有一个包含很长行的文本文件.我需要来自每一行的一条信息,并且需要查看唯一值.我最初的想法是使用Select-String并指定带有捕获组的正则表达式.我看了几个其他的帖子,但都没有用.这是快速而肮脏的C#等价物:

var text = File.ReadAllText(@"path\File.txt");
var r = new Regex("Path=\"(.*?)\"");
var matches = r.Matches(text);

var h = new HashSet<string>();

foreach(Match match in matches)
{
    h.Add(match.Groups[1].Value);
}

foreach (var s in h)
{
    Console.WriteLine(s);
}
Run Code Online (Sandbox Code Playgroud)

我怎么能在PowerShell中这样做?

更新:

测试答案,我意识到还有一个额外的要求.每个源代码行可以有多个匹配项.例:

Path="One" Path="Two"
Path="Two" Path="Three"

结果应该是:

One
Two
Three

regex powershell

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

ReSharper:我可以制作自己的上下文动作吗?

ReSharper有一个"Check parameter for null"上下文操作,它将自动插入代码以检查null参数,如果为null则抛出ArgumentNullException.

如果参数是一个字符串,我想要另一个选项:"检查字符串是否为空或空".这应该生成类似于这样的代码:

if (String.IsNullOrEmpty(result))
    throw new ArgumentException("Parameter cannot be null or empty", "result");
Run Code Online (Sandbox Code Playgroud)

有没有办法轻松地将它添加到ReSharper?

c# resharper

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

Unity RegisterInstance的IDisposable对象

Unity 2.0:

默认情况下,RegisterInstance使用ContainerControlledLifetimeManager.当处置Unity容器时,它会调用实例上的Dispose(如果是IDisposable).

在我的情况下,这不是我想要的.该实例由另一个类拥有并处置; Unity应该只注入引用.所以我用过:

container.RegisterInstance(instance, new ExternallyControlledLifetimeManager());
Run Code Online (Sandbox Code Playgroud)

Unity文档(在了解终身经理下)指出:

使用RegisterInstance方法注册现有对象会产生与刚刚使用RegisterType注册生命周期容器相同的行为.因此,建议您在使用非默认生存期管理器时不使用RegisterInstance方法注册现有对象,但调用RegisterInstance的线程除外.

这是什么意思?

同一部分还指出:

如果使用RegisterInstance方法注册了对象的现有实例,则容器将为Resolve或ResolveAll的所有调用返回相同的实例,或者当依赖性机制将实例注入其他类时,前提是满足下列条件之一:

  • 您已指定容器控制的生命周期管理器
  • 您已使用默认生命周期管理器
  • 您正在使用不同的生命周期管理器在您注册实例的相同上下文中进行解析.

在使用RegisterInstance和ExternallyControlledLifetimeManager之后,我尝试在另一个线程中解析,并且它工作了 - 我得到了单例实例.

我的代码与"创建实例注册"部分中的示例相匹配.不过,我想确保理解背景警告.

为了清楚起见,我总是希望Unity容器注入我注册的实例而不管线程等,我希望Unity处理它.我这样做了吗?

c# dependency-injection idisposable unity-container unity2.0

9
推荐指数
2
解决办法
3568
查看次数

流行的开源库和引用冲突

我们在所有(许多)内部应用程序中使用log4net.我们通常会执行相当于xcopy部署的操作.为方便开发人员,我们将log4net源编译为一个核心库.

现在又回来咬我们了.其他开源库(如Topshelf)引用log4net.还有一些(例如NServiceBus)将log4net合并到它们的程序集中.通常版本不同.

这是一个普遍的问题; 特定的库只是例子.

有几个类似的问题:

在各种解决方案(GAC,assemblyBinding,bindingRedirect等)中,未来可能会给我们带来最小的痛苦?我们可以修改我们的核心库; 我们无法做任何会破坏现场部署版本的事情.更新我们所有的项目参考将是痛苦的,所以我们只想这样做一次.

更新: Topshelf的当前版本抽象了日志记录,因此这不再是该框架的问题.

c# dll gac reference

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

为什么Fsharp Interactive允许闭包捕获可变变量?

使用Chris Smith的Programming F#3.0中的一个例子:

let invalidUseOfMutable() =
    let mutable x = 0
    let incrementX() = x <- x + 1
    incrementX()
    x;;
Run Code Online (Sandbox Code Playgroud)

这按预期失败:

错误FS0407:可变变量'x'以无效方式使用.闭包不能捕获可变变量.

现在将函数体剪切并粘贴到FSharp Interactive中:

let mutable x = 0
let incrementX() = x <- x + 1
incrementX()
x;;
Run Code Online (Sandbox Code Playgroud)

它的工作原理!

val it:int = 1

为什么?

f# closures mutable f#-interactive

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

在不生成程序集的情况下调用WCF服务

我试图在C#中编写一些代码,通过导入WSDL,检查它然后动态调用它来动态调用WCF服务.

我正在调用的服务可能会不时更改 - 所以如果它确实如此,我希望我的客户端知道新方法和新输入参数以及调用的输出参数,而无需重建我的客户端.

一种可能的解决方案是动态导入和编译服务引用.

这里概述:从WSDL动态创建程序集

我想避免生成一个组件,然后尽可能地反射它.

我查看了链接中动态代理的代码,他们使用框架类来进行导入.这个班是WsdlImporter.所以我认为很好 - 我可以使用它并检查WSDL模式并确定存在哪些调用以及可用的输入和输出.

问题是创建的MessagePartDescription对象中缺少类型信息WsdlImporter.显然这是因为它无法找到类型而丢失- 请参阅Brian对问题的回答.

那么关于我应该如何进行的任何建议?我在这里走错了路吗?

c# wcf wsdl dynamic wcf-binding

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

F#Seq.initInfinite给出StackOverflowException

我正在学习F#,而我很难理解为什么会崩溃.这是尝试解决Project Euler问题2.

let rec fibonacci n =
    if n = 1 then
        1
    elif n = 2 then
        2
    else
        fibonacci (n - 1) + fibonacci (n - 2)

let debugfibonacci n =
    printfn "CALC: %d" n
    fibonacci n

let isEven n =
    n % 2 = 0

let isUnderLimit n =
    n < 55

let getSequence =
    //[1..30]
    Seq.initInfinite (fun n -> n)
    |> Seq.map debugfibonacci
    |> Seq.filter isEven
    |> Seq.takeWhile isUnderLimit

Seq.iter (fun x -> printfn …
Run Code Online (Sandbox Code Playgroud)

f#

7
推荐指数
2
解决办法
801
查看次数

如何从F#Seq获取连续值对

我有一个序列{"1";"a";"2";"b";"3";"c";...}.

如何将此seq转换为 {("1","a");("2","b");("3","c");...}

f# sequence

7
推荐指数
4
解决办法
2174
查看次数

AutoFixture使用手动假货的AutoData理论

鉴于此系统要测试:

public class MySut
{
    private readonly IHardToMockDependency _hardToMockDependency;

    public MySut(IHardToMockDependency hardToMockDependency,
                 IOtherDependency otherDependency)
    {
        _hardToMockDependency = hardToMockDependency;
    }

    public string GetResult()
    {
        return _hardToMockDependency.GetResult();
    }
}

public interface IOtherDependency { }

public interface IHardToMockDependency
{
    string GetResult();
}
Run Code Online (Sandbox Code Playgroud)

而这个单元测试:

internal class FakeHardToMockDependency : IHardToMockDependency
{
    private readonly string _result;

    public FakeHardToMockDependency(string result)
    {
        _result = result;
    }

    public string GetResult()
    {
        return _result;
    }
}

public class MyTests
{
    [Fact]
    public void GetResultReturnsExpected()
    {
        string expectedResult = "what I …
Run Code Online (Sandbox Code Playgroud)

moq xunit.net autofixture automocking

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

AngularJS控制器返回值

John Papa将AngularJS的"控制器为"技术描述为:

myApp.controller("MainCtrl", [
    function () {
        var vm = this;  // convention - ViewModel
        vm.person = { name: "Bob" };
        return vm;
    }]);
Run Code Online (Sandbox Code Playgroud)

这条return vm;线的目的是什么?代码在没有它的情况下工作

javascript controller angularjs

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