小编Svi*_*ish的帖子

C#:如何查看Linq2SQL实体是否在数据库中

我想检查一个实体是否已添加到数据库中.那么,我怎么能看到a和之间的这种差异b

var a = dataContext.Things.First(x => x.Name == something);
var b = new Thing { Name = something };
Run Code Online (Sandbox Code Playgroud)

为了更清楚,如果我有这个:

var thing = dataContext.Things.FirstOrDefault(x => x.Name == something) 
            ?? new Thing { Name = something };
Run Code Online (Sandbox Code Playgroud)

如何查看是否thing需要插入?

c# datacontext linq-to-sql

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

C#:线程安全事件

下面的实现是否是线程安全的?如果不是我错过了什么?我应该在volatile某个地方有关键字吗?或者在OnProcessingCompleted方法的某个地方锁定?如果是的话,在哪里?

public abstract class ProcessBase : IProcess
{
    private readonly object completedEventLock = new object();

    private event EventHandler<ProcessCompletedEventArgs> ProcessCompleted;

    event EventHandler<ProcessCompletedEventArgs> IProcess.ProcessCompleted
    {
        add
        {
            lock (completedEventLock)
                ProcessCompleted += value;
        }
        remove
        {
            lock (completedEventLock)
                ProcessCompleted -= value;
        }
    }

    protected void OnProcessingCompleted(ProcessCompletedEventArgs e)
    {
        EventHandler<ProcessCompletedEventArgs> handler = ProcessCompleted;
        if (handler != null)
            handler(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:我有私有事件和显式接口的原因是因为它是一个抽象基类.从它继承的类不应该直接对该事件做任何事情.添加了类包装器,使其更清晰=)

c# events multithreading event-handling thread-safety

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

C#:使用虚拟对象初始化事件处理程序

我在某些地方看到过这种代码:

public event SomeEventHandler SomeEvent = (s, e) => { };
Run Code Online (Sandbox Code Playgroud)

这是一种推荐的做事方式吗?它解决了什么,是否有任何值得注意的副作用?我还需要做空检查吗?或者这正是我不必再做的了?垃圾收集仍然可以正常工作吗?


例如:

private PropertyChangedEventHandler propertyChanged;
private readonly object propertyChangedLock = new object();
public event PropertyChangedEventHandler PropertyChanged
{
    add
    {
        lock (propertyChangedLock)
            propertyChanged += value;
    }
    remove
    {
        lock (propertyChanged)
            propertyChanged -= value;
    }
}
protected void OnPropertyChanged(string propertyName)
{
    PropertyChangedEventHandler handler;
    lock (propertyChangedLock)
        handler = propertyChanged;

    if (handler != null)
        handler(this, new PropertyChangedEventArgs(propertyName));
}
Run Code Online (Sandbox Code Playgroud)

我可以将第一行更改为:

private PropertyChangedEventHandler propertyChanged = (s, e) => { };
Run Code Online (Sandbox Code Playgroud)

然后跳过OnPropertyChanged方法中的空值检查?如果我然后跳过空检查我可以跳过锁吗?如果是这样会给我这个:

protected void OnPropertyChanged(string propertyName) …
Run Code Online (Sandbox Code Playgroud)

c# multithreading event-handling

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

Windows服务和常规应用程序有什么区别?

我只创建了常规的Windows应用程序(主要是C#).Windows服务与常规Windows应用程序的区别是什么?是什么让他们不同?应用程序无法提供哪些服务?从开发人员的角度看有哪些不同之处?你是如何创造一个的?它只是创建一个常规应用程序(可能是控制台应用程序,因为没有gui?)并以特殊方式运行或安装它,还是需要做更多的事情?

c# windows comparison windows-services

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

C#:如何交换两个winform控件的位置

假设你有两个人Control,爱丽丝和鲍勃,你想交换他们的位置.我的意思是交换后:

  • 如果他们住在同一个地方ControlCollection,那么Alice应该拥有Bob的索引,反之亦然.
  • 如果在不同的ControlCollections中,Alice应该具有与Bob相同的索引,但是在Bobs中ControlCollection,反之亦然.

你会怎么做?由于ControlCollection方法的工作原理,我有点不确定如何最好地解决这个问题.例如,使用Remove删除控件的方法将更改集合中后面的所有控件的索引.SetChildIndex以类似的方式工作.

编辑: Alice和Bob的父控件是流布局面板.这就是为什么我要交换它们的索引,这将有效地在流布局面板中交换它们的位置.

c# collections controls winforms

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

如何从Codeplex项目中删除TFS绑定

我在Codeplex上托管了几个项目.因为当我创建TFS时,除了TFS之外我什么都不知道,我使用了它.但是,现在我对TortoiseSVN和VisualSVN感到更舒服,所以我想用它来代替.

当然,使用subversion获取我的项目是没有问题的.问题是项目中有TFS绑定.我怎样才能删除这些?一步一步的指南会很好.

所以你不必想知道我有什么工具:我可以使用Visual Studio中的TFS Explorer和TortoiseSVN连接到项目.我也安装了TFS电动工具,所以如果需要我也可以使用它们.

svn tfs codeplex source-control-bindings

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

C#:如何检查是否可以读取和/或删除目录

我递归地遍历一堆目录.其中一些(如D:\ $ RECYCLE.BIN\S-1-5-20)给了我一个System.UnauthorizedAccessException.我想我可以抓住它并继续前进,但我宁愿提前弄明白.

所以,当我有一个DirectoryInfo对象时.我怎么能看到我是否被允许GetDirectories()并且可能被允许Delete()

c# directory access-control

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

C#:如何测试基本的线程工作者类

我正在考虑如何测试多线程的东西,但不太确定如何开始.我相信如果我能把事情搞定,我会更容易找到更多的东西,所以我想知道是否有人可以帮助我为这个简单的类编写一个NUnit测试用例:

class Worker
{
    public event EventHandler<EventArgs> Done = (s, e) => { };

    public void StartWork()
    {
        var thread = new Thread(Work) { Name = "Worker Thread" };
        thread.Start();
    }

    private void Work()
    {
        // Do some heavy lifting
        Thread.Sleep(500);
        Done(this, EventArgs.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想测试的只是:Done事件完成时是否会引发事件.如果它是同步的话我会没有问题,但是当它不是时,我不知道哪里开始.一个简单的测试,如果它不是多线程的(并且该Work方法不是私有的)可能是:

[TestFixture]
class WorkerTests
{
    [Test]
    public void DoWork_WhenDone_EventIsRaised()
    {
        var worker = new Worker();

        var eventWasRaised = false;
        worker.Done += (s, e) => eventWasRaised = true;

        worker.Work();
        Assert.That(eventWasRaised);
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# events multithreading nunit

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

C#,NUnit:如何处理异常测试和延迟执行

假设我们有一个如下所示的方法:

public IEnumerable<Dog> GrowAll(this IEnumerable<Puppy> puppies)
{
    if(subjects == null)
        throw new ArgumentNullException("subjects");

    foreach(var puppy in puppies)
        yield return puppy.Grow();
}
Run Code Online (Sandbox Code Playgroud)

如果我通过这样做测试:

Puppy[] puppies = null;
Assert.Throws<ArgumentNullException>(() => puppies.GrowAll());
Run Code Online (Sandbox Code Playgroud)

测试将失败说它

预期:<System.ArgumentNullException>
但是: null

我可以通过改变测试来解决这个问题

Puppy[] puppies = null;
Assert.Throws<ArgumentNullException>(() => puppies.GrowAll().ToArray());
Run Code Online (Sandbox Code Playgroud)

这通常是你通常会这样做的吗?或者有更好的方法来编写测试吗?或者也许是一种更好的方法来编写方法本身?


尝试使用内置Select方法做同样的ToArray事情,即使没有或类似的事情它也失败了,所以显然你可以做些什么......我只是不知道:p

c# nunit exception deferred-execution

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

MySQL:',`,'和"之间的区别

当在互联网和手册中看到SQL代码时,似乎有很多用于表示字符串的东西(或者至少是我认为他们做的那些?).

使用",","或"之间有什么区别吗?它们是否完全相同?或者它们中的一些是否具有特殊含义?某些情况下是否应该使用某些情况?其他情况下是否应该使用?这里的交易是什么?

mysql string

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