小编mic*_*ael的帖子

C#:在尝试从另一个程序集中使用它之前,如何确保设置变量存在?

我有以下内容:

using CommonSettings = MyProject.Commons.Settings;

public class Foo
{
    public static void DoSomething(string str)
    {
        //How do I make sure that the setting exists first?
        object setting = CommonSettings.Default[str];

        DoSomethingElse(setting);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# settings settings.settings

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

为什么在调用之前为事件分配处理程序?

基本上,我已经看到这经常使用:

    public event MyEventHandler MyEvent;

    private void SomeFunction()
    {
        MyEventHandler handler = this.MyEvent;

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

当它可以像这样容易地完成时:

    public event MyEventHandler MyEvent;

    private void SomeFunction()
    {
        if (MyEvent != null)
        {
            MyEvent(this, new MyEventArgs());
        }
    }
Run Code Online (Sandbox Code Playgroud)

那么,我错过了什么吗?是否有人将事件分配给处理程序,然后引发处理程序而不是事件本身?这只是"最佳实践"吗?

c# events

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

Visual Studio解决方案 - 任何创建"特殊"文件夹的方法?

基本上,我希望我的一个文件夹作为一种"特殊文件夹"出现在其他文件夹的上方,类似于Properties如何拥有它自己的特殊位置,即使它是一个文件夹,与App_Data相同,等等.

这可能吗?

msbuild project visual-studio-2010 special-folders solution-explorer

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

StyleCop/FxCop 10 - 如何仅在命名空间级别上正确抑制消息?

FxCop 10抱怨以下内容:

using XYZ.Blah; //CA1709 - "XYZ"
using Xyz.Blah; //No complaint.

using XylophoneSuperDuperLongFullName.Blah; //I don't want to have a long full name for my company name.
Run Code Online (Sandbox Code Playgroud)

问题是......我希望我的公司名称显示在所有大写字母中,因为XYZ是缩写.该名称的长版本太长,无法成为有用的命名空间.微软逃脱了这种东西,因为他们的首字母缩写只有两个字母.

using MS.Something; //No Complaint.
using Microsoft.SomethingElse; //No Complaint.
Run Code Online (Sandbox Code Playgroud)

所以,我正在考虑添加一个SuppressMessageAttribute来抑制此警告.但是,我不确定如何恰当地这样做(或者甚至在哪里坚持它),以便它只影响这一个实例.我不想在该命名空间中抑制任何内容,因为我想抓住我犯的任何其他错误.我确实看过msdn和谷歌搜索但我找不到任何显示如何专门针对这个实例.我发现最接近的是Scope ="namespace",但我不确定这是否意味着它会影响实际的命名空间名称,或者它是否会影响该命名空间中的所有内容.

c# fxcop namespaces stylecop suppressmessage

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

如何在不破坏现有Object.Equals()的情况下检查两个对象的属性是否相等?

基本上,GethashCode是不同的,即使它们包含属性的SAME值...那么为什么默认返回diff hashcodes?

public class User
{
    public Int32 Id { get; set; }
    public String Username { get; set; }
}

User a = new User();
a.Id = 1;
a.Username = "Hello";

User b = new User();
b.Id = 1;
b.Username = "Hello";

Console.WriteLine("Hash A: {0} | Hash B: {1}", a.GetHashCode(), b.GetHashCode());
//Hash A: 37121646 | Hash B: 45592480 <-- these values change each time I rerun the app?
Run Code Online (Sandbox Code Playgroud)

有没有更合适的方法来实现它,所以我不会破坏Object.Equals如何为我的对象工作,但我仍然可以根据参数值进行自己的相等检查?

我问的原因是因为我有一个服务:SynchronizeUsers()下载一组用户.我宁愿只更新需要更新的那些,删除同步所说的那些,而不是清除我的用户缓存,而是添加新的.但是,我不能只对这些对象做Object.Equals().

c# equals object hashcode

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

在等待N个异步方法完成时是否有标准模式?

public class FooDataRepository
{
    private MyServiceReferenceClient Client { get; set; }

    public void FooClass()
    {
        Client = new MyServiceReferenceClient();
        Client.SaveFooCompleted += Client_SaveFooCompleted;
        Client.SaveBarCompleted += Client_SaveBarCompleted;
    }

    private void Client_SaveFooCompleted(Object sender, EventArgs e) { ... }

    private void Client_SaveBarCompleted(Object sender, EventArgs e) { ... }

    public void SaveFoo(Foo foo)
    {
        Client.SaveFooAsync(foo);

        foreach (var bar in foo.Bars)
            Client.SaveBarAsync(bar);
    }

}
Run Code Online (Sandbox Code Playgroud)

一旦完成SaveFooAsync所有SaveBarAsync方法,我想在FooDataRepository类中做一些事情.是否存在基于N个异步调用完成的尝试执行单个操作的标准模式?

c# wcf events design-patterns asynchronous

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

WPF TextBox MaxLength - 有没有办法将它绑定到绑定字段上的数据验证最大长度?

视图模型:

public class MyViewModel
{
    [Required, StringLength(50)]
    public String SomeProperty { ... }
}
Run Code Online (Sandbox Code Playgroud)

XAML:

<TextBox Text="{Binding SomeProperty}" MaxLength="50" />
Run Code Online (Sandbox Code Playgroud)

有没有办法避免设置TextBox的MaxLength以匹配我的ViewModel(可能会因为它在不同的程序集中而改变)并让它根据StringLength要求自动设置最大长度?

c# wpf xaml maxlength data-annotations

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

WCF/WebService:可互操作的异常处理

我知道WCF会将异常转换为错误并将其作为SOAP消息发回,但我想知道这是否真的可以互操作.我想我正在努力找出这种可能的情况:

  1. 客户端(Java)调用WCF服务(LoginService).
  2. 服务器检查适当的授权,用户授权失败.
  3. 服务器抛出UnauthorizedAccessException.
  4. WCF以某种方式将其转换为故障.(* - 见下面)
  5. 客户必须能够知道如何读取此故障.

我想我只是很难理解它是如何仍然可以互操作的,因为它期望Java知道如何转换.NET编译的UnisonAccessException的SOAP错误.

  • 此外,.NET如何实际将异常转换为故障,故障代码,名称等等.有些事情似乎是"呃",也许故障名称是"UnauthorizedAccessException",但是我d相当肯定而不是猜测.

wcf exception wcf-interoperability faultexception

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

PRISM + MEF - 如何指定要使用的导出?

基本上,我如何指定我的哪些实现可供选择?

FooService.cs:

public interface IFooService
{
    Int32 GetFoo();
}

[Export(typeof(IFooService))]
public sealed class Foo100 : IFooService
{
    public Int32 GetFoo()
    {
        return 100;
    }
}


[Export(typeof(IFooService))]
public sealed class Foo200 : IFooService
{
    public Int32 GetFoo()
    {
        return 200;
    }
}
Run Code Online (Sandbox Code Playgroud)

ClientViewModel.cs:

[Export()]
public class ClientViewModel : NotificationObject
{
    [Import()]
    private IFooService FooSvc { get; set; }

    public Int32 FooNumber
    {
        get { return FooSvc.GetFoo(); }
    }
}
Run Code Online (Sandbox Code Playgroud)

Boostrapper.cs:

public sealed class ClientBootstrapper : MefBootstrapper
{
    protected …
Run Code Online (Sandbox Code Playgroud)

c# service dependency-injection prism mef

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

C#:有什么方法可以跳过多态中的一个基本调用?

class GrandParent
{
    public virtual void Foo() { ... }
}

class Parent : GrandParent
{
    public override void Foo()
    {
       base.Foo();

       //Do additional work
    }
}

class Child : Parent
{
    public override void Foo()
    {
        //How to skip Parent.Foo and just get to the GrandParent.Foo base?

        //Do additional work
    }
}
Run Code Online (Sandbox Code Playgroud)

如上面的代码所示,我如何让Child.Foo()调用GrandParent.Foo()而不是进入Parent.Foo()?base.Foo()首先带我到Parent类.

c# polymorphism inheritance overriding virtual-functions

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