我有以下内容:
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) 基本上,我已经看到这经常使用:
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)
那么,我错过了什么吗?是否有人将事件分配给处理程序,然后引发处理程序而不是事件本身?这只是"最佳实践"吗?
基本上,我希望我的一个文件夹作为一种"特殊文件夹"出现在其他文件夹的上方,类似于Properties如何拥有它自己的特殊位置,即使它是一个文件夹,与App_Data相同,等等.
这可能吗?
msbuild project visual-studio-2010 special-folders solution-explorer
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",但我不确定这是否意味着它会影响实际的命名空间名称,或者它是否会影响该命名空间中的所有内容.
基本上,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().
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个异步调用完成的尝试执行单个操作的标准模式?
视图模型:
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要求自动设置最大长度?
我知道WCF会将异常转换为错误并将其作为SOAP消息发回,但我想知道这是否真的可以互操作.我想我正在努力找出这种可能的情况:
我想我只是很难理解它是如何仍然可以互操作的,因为它期望Java知道如何转换.NET编译的UnisonAccessException的SOAP错误.
基本上,我如何指定我的哪些实现可供选择?
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) 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# ×8
events ×2
wcf ×2
asynchronous ×1
equals ×1
exception ×1
fxcop ×1
hashcode ×1
inheritance ×1
maxlength ×1
mef ×1
msbuild ×1
namespaces ×1
object ×1
overriding ×1
polymorphism ×1
prism ×1
project ×1
service ×1
settings ×1
stylecop ×1
wpf ×1
xaml ×1