小编Eri*_*ich的帖子

具有无投保证的IEnumerable Extensions

就个人而言,作为客户端,我是C#中IEnumerable/List扩展方法的流畅接口语法的粉丝.也就是说,我更喜欢这样的语法:

    public void AddTheseGuysToSomeLocal(IEnumerable<int> values)
    {
        values.ToList().ForEach(v => _someLocal += v);
    }
Run Code Online (Sandbox Code Playgroud)

而不是像foreach循环这样的控制结构.我发现一眼就能更容易地进行心理处理.问题是,如果客户端传递给我一个null参数,我的代码将生成空引用异常.

让我们假设我不想将空枚举视为例外 - 我希望这会导致一些本地原样 - 我会添加一个空保护.但是,根据我的口味,这在语法上有点嘈杂,如果你在一个流畅的界面中将这些链接在一起,并且中期结果也可以为空,那么噪音就会增加.

因此,我创建了一个名为SafeEnumerableExtensions的类,它通过将空值视为空枚举(列表)来提供无抛出保证.示例方法包括:

    //null.ToList() returns empty list
    public static List<T> SafeToList<T>(this IEnumerable<T> source)
    {
        return (source ?? new List<T>()).ToList();
    }

    //x.SafeForEach(y) is a no-op for null x or null y
    //This is a shortcut that should probably go in a class called SafeListExtensions later
    public static void SafeForEach<T>(this List<T> source, Action<T> action)
    {
        var myAction = action ?? new Action<T>(t => { });
        var …
Run Code Online (Sandbox Code Playgroud)

c# null extension-methods exception

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

如何使用moq为单元测试设置服务器变量

我正在使用hanselman教程使用Moq为我的asp.net页面创建单元测试.

我编写了以下代码来测试contextbase请求类中的ServerVariables

HttpContextBase contextbase = MoqHelper.FakeHttpContext();
contextbase.Request.ServerVariables.Add("AUTH_TYPE","Forms"); <-- error here
contextbase.Request.ServerVariables.Add("LOGON_USER", "Tom");
contextbase.Request.ServerVariables.Add("REQUEST_METHOD", "GET");
Run Code Online (Sandbox Code Playgroud)

但我得到以下例外.请帮忙.

用户代码未处理System.NullReferenceException消息=未将对象引用设置为对象的实例.

如何创建单元测试来测试服务器变量?

c# asp.net unit-testing moq

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

"强制"符合通用约束

我有一个Target<T>不能改变的类,带有通用约束.我想可能从没有约束的泛型类构建该类的实例.下面演示了我想要做的意图,但我意识到这段代码不会编译,这typeof(T).IsClass是运行时检查,通用约束是编译时的问题.

public class TargetMaker<T>
{
    public object GetTarget()
    {
        if (typeof(T).IsClass)
        {
            return new Target<T>();
        }
        return default(T);
    }
}

public class Target<T> where T : class
{
    public Target() { }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以想到一种方法,我可以在TargetMaker中实现我想要的,而不需要为其添加匹配约束,同时保留TargetMaker类中的所有逻辑?

c# generics constraints

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

使用NDepend查看代码度量标准中的趋势

我有一个NDepend版本用于构建服务器,并自动生成NDepend报告.因此,每晚构建都会发挥作用,并生成NDepend报告/ XML.我现在想要做的是跟踪一些时间因素的指标.

因此,例如,在y轴上具有特定类型或命名空间(例如,传入耦合)的图形与x轴上的时间可能是很好的.我知道我可以比较两个NDepend构建并具有代码和度量差异,但我想要做的是比较相同的单个度量或N个构建的度量以查看正在进行的趋势.

我有点假设当前没有一个工具可以做到这一点,而且我必须自己动手,但如果有一个,我肯定喜欢在投入时间之前听到它.那么,NDepend本身是否支持这样的东西,或者是否存在某些我可以使用的实用工具?

除了NDepend之外,我也愿意接受其他可以实现这一目标的技术建议,尽管由于已经投入了NDepend并熟悉它的工作方式,我对NDepend有很强的偏好.

提前致谢.

c# static-analysis ndepend visual-studio-2010 cqlinq

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

使用Coherence和Moq时的System.BadImageFormatException

在moq单元测试中使用以下行时,我得到一个System.BadImageFormatException.

mockDataAccessLayer.Setup(dal => dal.ListItems(It.IsAny<List<IFilter>>()));
Run Code Online (Sandbox Code Playgroud)

例外:

System.BadImageFormatException : [C:\Users\ric\AppData\Local\Temp\q3a2acu1.brz\RJ.DAL.test\assembly\dl3\cb8fb82f\e33b012a_c5f6cc01\RJ.DAL.test.DLL] The signature is incorrect.
at RJ.DAL.test.DALLayerTest.DataAccessLayerTest()
Run Code Online (Sandbox Code Playgroud)

完整单元测试:

[Test]
public void DataAccessLayerTest()
{   
    var mockDataAccessLayer = new Mock<IDAL>();
    mockDataAccessLayer.Setup(dal => dal.ListItems(It.IsAny<List<IFilter>>()));
    var dataAccessLayer = mockDataAccessLayer.Object;
}
Run Code Online (Sandbox Code Playgroud)

我很确定问题在于IFilter列表,因为我在其他地方使用非常相似的代码而没有It.IsAny工作正常.有任何想法吗?

.net c# moq oracle-coherence

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

c#多线程方法名称

我正在尝试创建一个循环,为列表中的每个程序创建一个线程,但我在下面的代码上传递周长时得到"预期的方法名称"错误;

for (i = 0; i <= programs.Count; i++)
{
    checkProcess check = new checkProcess();
    // check.isRunning();

    string filename = programs[i].Filename;
    string filepath = programs[i].Filepath;

    mWorkerThread = new Thread(new ThreadStart(check.isRunning(filename, filepath)));

    mWorkerThread.Start();
}
Run Code Online (Sandbox Code Playgroud)

我读了一些代表,但似乎无法让他们在我的问题的背景下工作.任何帮助将非常感谢我应该朝哪个方向前进.

c# methods multithreading

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

C#Regex.Split和正则表达式

我有字符串,我需要将它拆分两次并选择追求特殊字符的部分.

让我们说:

string myString = "Word 2010|82e146e7-bc85-4bd4-a691-23d55c686f4b;#Videos|55140947-00d0-4d75-9b5c-00d8d5ab8436";

string[] guids = Regex.Split(myString,";#");
Run Code Online (Sandbox Code Playgroud)

所以这里我得到了两个带有Value + GUID元素的数组.但我只需要Guids,例如:

[0] 82e146e7-bc85-4bd4-a691-23d55c686f4b

[1] 55140947-00d0-4d75-9b5c-00d8d5ab8436

有没有办法用一两行做?

c# guid

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

自动引发Windows服务的方法

大家,早安,

我是C#的新手,已经面临挑战.我从未进行过专业编程,而且我对C#的服务感到困惑.

我们有一项服务,我想知道是否有任何方法可以自动完成这项工作.例如:我的服务每天24小时运行.即使将CanStop属性设置为false,服务有时也会因为缺乏能量,重新启动终端或任何其他问题而崩溃.

到目前为止我唯一尝试的是设置一种方法来不时重启服务,但这对我不利,因为它会极大地影响自己的工作和Windows服务的性能.

有人能给我一只手吗?

谢谢大家

c# windows-services

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

更改矩形背景以反映WPF中DataContext中的布尔状态

我有一个简单的UI,它在其应用程序模型中调用几个解析和处理例程,通过BackgroundWorkers异步执行它们的工作.当模型代码不起作用时,它会设置一些属性,解析和处理.我的UI中有两个矩形,我想根据这些bool是否设置来改变颜色.窗口DataContext设置为模型,消息列表和UI的其他部分工作正常,我似乎无法弄清楚如何表达我想在XAML中做什么.

这是我的矩形代码的示例:

<Rectangle Height="20" Name="ParsingLamp" Stroke="Black" Width="20" RadiusX="4" RadiusY="4" Fill="Gray">
    <Rectangle.Triggers>
        <Trigger Property="{Binding Path=Parsing}" Value="true">
            <Setter TargetName="ParsingLamp" Property="Fill" Value="LightGreen" />
        </Trigger>
        <Trigger Property="{Binding Path=Parsing}" Value="false">
            <Setter TargetName="ParsingLamp" Property="Fill" Value="Brown" />
        </Trigger>
    </Rectangle.Triggers>
</Rectangle>
Run Code Online (Sandbox Code Playgroud)

我收到一条错误,上面写着"填充成员无效,因为它没有质量类型名称."

也许触发器不是正确的方法来做我想要完成的事情?

c# wpf xaml

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