小编sti*_*k81的帖子

如何检查当前线程的公寓状态?

我有一个需要在STA公寓状态下运行的功能.我不想检查它是否作为STA运行,如果没有生成一个在STA中运行的新线程.

如何检查当前线程运行的公寓状态?

.net c# multithreading sta apartment-state

24
推荐指数
2
解决办法
5271
查看次数

使用反射来查找实现的接口

我有以下情况:

public interface IPerson { .. }    
public class Person : IPerson { .. }    
public class User : Person { .. }
Run Code Online (Sandbox Code Playgroud)

现在; 如果我有一个"用户"对象 - 我如何检查这是否使用反射实现IPerson?更确切地说,我有一个可能具有属性SomeUser的对象,它应该是某种类型,实现接口"IPerson".在我的情况下,我实际上有一个用户,但这是我想通过反思检查.我无法弄清楚如何检查属性类型,因为它是一个"用户",但我想检查它是否实现了IPerson ...:

var control = _container.Resolve(objType); // objType is User here
var prop = viewType.GetProperty("SomeUser");
if ((prop != null) && (prop.PropertyType is IPerson)) 
{ .. }
Run Code Online (Sandbox Code Playgroud)

(请注意,这是我实际情况的简化,但重点应该相同......)

.net c# reflection

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

VS2010代码覆盖率是否支持nUnit?

根据这种模式, VS2010 Premium和Ultimate有一个用于检查代码覆盖率的工具 - 以及一些其他测试工具.这也支持nUnit,还是只支持MS测试?

nunit mstest code-coverage visual-studio-2010

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

将IList中的元素添加到ObservableCollection

我有一个ObservableCollection,我想将IList的内容设置为这个.现在我可以创建一个新的集合实例..:

public ObservableCollection<Bar> obs = new ObservableCollection<Bar>(); 
public void Foo(IList<Bar> list)
{
    obs = new ObservableCollection<Bar>(list); 
}
Run Code Online (Sandbox Code Playgroud)

但是,我怎样才能真正获取IList的内容并将其添加到我现有的ObservableCollection中?我是否必须遍历所有元素,还是有更好的方法?

public void Foo(IList<Bar> list)
{
   foreach (var elm in list)
       obs.Add(elm); 
}
Run Code Online (Sandbox Code Playgroud)

c# list observablecollection

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

单元测试异步功能

在下面的代码示例中,我有一个Async Calculator类.这是注入一个ICalc,它将是一个同步计算器.我使用依赖注入和模拟ICalc,因为这类似于我的真实场景,尽管我认为模拟与问题无关.AsyncCalc有一个函数,它将异步调用另一个函数 - 将回调作为参数.当异步函数调用完成时,将使用结果触发回调.

现在我想测试我的异步函数 - 检查是否使用期望参数触发了回调.这段代码似乎有效.但是,我觉得它可能随时都会爆炸 - 我担心的是在函数结束和测试终止之前完成回调的竞争条件 - 因为这将在一个单独的线程中运行.

我现在的问题是,如果我在正确的轨道单元测试异步功能,或者是否有人可以帮助我走上正确的轨道..?更好的是,如果我能确保立即触发回调 - 最好是在同一个线程上我猜?可以/应该这样做吗?

public interface ICalc
{
    int AddNumbers(int a, int b);
}

public class AsyncCalc
{
    private readonly ICalc _calc;
    public delegate void ResultProcessor(int result);
    public delegate int AddNumbersAsyncCaller(int a, int b);

    public AsyncCalc(ICalc calc)
    {
        _calc = calc; 
    }

    public void AddNumbers(int a, int b, ResultProcessor resultProcessor)
    {
        var caller = new AddNumbersAsyncCaller(_calc.AddNumbers);
        caller.BeginInvoke(a, b, new AsyncCallback(AddNumbersCallbackMethod), resultProcessor);
    }

    public void AddNumbersCallbackMethod(IAsyncResult ar)
    {
        var result = …
Run Code Online (Sandbox Code Playgroud)

.net c# unit-testing asynchronous

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

将WCF与抽象类一起使用

如何在WCF中为抽象类定义DataContract?

我有一个类"人",我使用WCF成功通信.现在我添加一个从Person引用的新类"Foo".一切都还不错.但是当我将Foo抽象化并定义一个子类时,它就失败了.它在服务器端使用CommunicationException失败,但这并没有真正告诉我太多.

我的简化课程用于测试:

[DataContract]
public class Person
{
    public Person()
    {
        SomeFoo = new Bar { Id = 7, BaseText = "base", SubText = "sub" };
    }

    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public Foo SomeFoo { get; set; }
}

[DataContract]
public abstract class Foo
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string BaseText { get; set; }
}

[DataContract]
public class Bar : Foo
{
    [DataMember]
    public string SubText { get; …
Run Code Online (Sandbox Code Playgroud)

.net wcf abstract-class datacontract

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

将数据注入WCF服务

我有像Miguel Castro建议的WCF服务结构.这意味着我已手动设置所有内容,并使用ServiceHost对象托管我的服务的控制台应用程序.

我想保持我的服务类很薄,他们目前只是调用行为类.我现在的问题是单元测试服务类.我想向类中注入一些东西作为构造函数参数,这样我就可以模拟它并编写适当的隔离单元测试.ServiceHost类似乎不接受参数,所以我的问题是如何将数据注入服务类 - 或者我不能?

.net service wcf unit-testing dependency-injection

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

WCF的替代品

我目前正在使用WCF实现一个Silverlight应用程序,用于客户端和服务器之间的通信.我听说使用WCF我们必然会在客户端使用一些Microsoft技术,并且不能轻易地将其替换为"任何东西" - 至少使用WPF的默认SOAP实现.

所以我的问题是:

  • 这是真的?
  • Restful WCF服务怎么样?我描绘了一个简单的REST实现,任何客户端都可以通过REST与该服务器端进行通信.是?没有?
  • 扔掉WCF的(好的)替代方案是什么?为什么我要这样做?

service wcf

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

在DataTrigger条件中使用绑定

假设我有以下简单类:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class PersonHolder
{
    public Person CurrentPerson { get; set; }
    public int ActiveId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我有类PersonH​​older的实例为栅格DataContext,和在网格我有一个StackPanel被绑定到CurrentPersonPersonHolder-表示它的数据:

<Grid>
    <StackPanel x:Name="PersonPanel" DataContext="{Binding CurrentPerson}">
        <TextBlock Text="{Binding Id}" />
        <TextBlock Text="{Binding Name}" />            
    </StackPanel>        
</Grid>
Run Code Online (Sandbox Code Playgroud)

所以-这个问题:我如何给StackPanel在绿色背景CurrentPerson有一个Id匹配ActiveId的的PersonHolder(是的,非常有用的,但是这仅仅是一个非常简单的例子..).我的想法是,这是一个使用触发器的东西,但我可以在触发条件值中使用绑定吗?如果是这样我可以这样做:

<Grid x:Name="Foo">
    <StackPanel x:Name="PersonPanel" …
Run Code Online (Sandbox Code Playgroud)

.net data-binding wpf datatrigger

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

使用LINQ"无处不在"时的性能问题?

升级到ReSharper5后,它为我提供了更多有关代码改进的有用提示.我现在到处看到的一个是用LINQ查询替换foreach语句的提示.举个例子:

private Ninja FindNinjaById(int ninjaId)
{
    foreach (var ninja in Ninjas)
    {
        if (ninja.Id == ninjaId)
            return ninja;
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

建议使用LINQ替换为以下内容:

private Ninja FindNinjaById(int ninjaId)
{
    return Ninjas.FirstOrDefault(ninja => ninja.Id == ninjaId);
}
Run Code Online (Sandbox Code Playgroud)

这看起来很好,我确信在替换这个foreach时性能没有问题.但这是我应该做的一般事情吗?或者我可能遇到所有这些LINQ查询的性能问题?

.net c# linq resharper performance

18
推荐指数
6
解决办法
2246
查看次数