相关疑难解决方法(0)

C#的隐藏功能?

在我从这个问题中学到以下内容后,我想到了这一点:

where T : struct
Run Code Online (Sandbox Code Playgroud)

我们C#开发人员都知道C#的基础知识.我的意思是声明,条件,循环,运算符等.

我们中的一些人甚至掌握了Generics,匿名类型,lambdas,LINQ等......

但是C#粉丝,瘾君子,专家几乎都不知道C#最隐藏的功能或技巧是什么?

以下是到目前为止显示的功能:


关键词

属性

c# hidden-features

1475
推荐指数
230
解决办法
68万
查看次数

使用扩展方法提升C#事件 - 这很糟糕吗?

我们都熟悉C#事件声明的恐怖.为了确保线程安全,标准是写这样的东西:

public event EventHandler SomethingHappened;
protected virtual void OnSomethingHappened(EventArgs e)
{            
    var handler = SomethingHappened;
    if (handler != null)
        handler(this, e);
}
Run Code Online (Sandbox Code Playgroud)

最近在这个板上的一些其他问题(我现在找不到),有人指出在这种情况下可以很好地使用扩展方法.这是一种方法:

static public class EventExtensions
{
    static public void RaiseEvent(this EventHandler @event, object sender, EventArgs e)
    {
        var handler = @event;
        if (handler != null)
            handler(sender, e);
    }
    static public void RaiseEvent<T>(this EventHandler<T> @event, object sender, T e)
        where T : EventArgs
    {
        var handler = @event;
        if (handler != null)
            handler(sender, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

有了这些扩展方法,你需要声明和引发一个事件就像这样: …

.net c# events extension-methods event-handling

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

是否必须在自定义实现中覆盖默认的成员资格提供程序的OnValidatingPassword?

我正在为我的.net应用程序实现自定义成员资格提供程序.我已经设置了最少数量的字符和非字母数字字符的配置,但它似乎无论如何都要通过密码,即使它们违反了规则.

OnValidatingPassword是一种虚方法.Microsoft示例不会覆盖该方法.

这个问题解决了同样的问题,但作者放弃了对他的问题的答案,并简单地覆盖了这个功能.这个答案表明,人们不必重写函数来使其工作.

基本功能没有做任何事情吗?当我重写OnValidatePassword,并简单地调用基类时,我的函数被命中,但它永远不会拒绝我太简单的密码.

代码示例(使用自定义CreateUser函数)

protected override void OnValidatingPassword(ValidatePasswordEventArgs e)
        {                        
             base.OnValidatingPassword(e);
        }
        //
        // MembershipProvider.CreateUser
        //
        public MembershipUser CreateUser(string username, string password, string globalIdentifier, string firstName, string lastName, 
            string birthDate, object providerUserKey, out MembershipCreateStatus status)
        {
            ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, password, true);
            OnValidatingPassword(args);

            if (args.Cancel)
            {
                status = MembershipCreateStatus.InvalidPassword;
                return null;
            }
Run Code Online (Sandbox Code Playgroud)

.net asp.net-membership membership-provider custom-membershipprovider

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

这种向后命名惯例是一个坏主意(即违反行业标准)吗?

我总是颠倒名字,以便他们自然地分成智能感知.我想知道这是不是一个坏主意.

例如,我运行一个宠物商店,我有发票页面添加,编辑,删除和存储页面显示,预览,编辑.要获取这些的URL,我会调用这些方法(在一个合适的类中,如GlobalUrls.cs

InvoicingAddUrl()
InvoicingEditUrl()
InvoicingDeleteUrl()

StoreDisplayUrl()
StorePreviewUrl()
StoreEditUrl()
Run Code Online (Sandbox Code Playgroud)

这在intellisense很好地组合他们.更合乎逻辑的命名是:

AddInvoiceUrl()
EditInvoiceUrl()
DeleteInvoiceUrl()

DisplayStoreUrl()
PreviewStoreUrl()
EditStoreUrl()
Run Code Online (Sandbox Code Playgroud)

将它们分组为intellisense或逻辑上是否更好(更好的存在,更多的是行业标准方式)?

coding-style naming-conventions

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

WPF中的命名命令

由于没有英语作为主要语言,因此在命名方法和属性时经常会质疑语法。

我将其NextCommand用作命令,NextCommandExecuted执行方法和CanNextCommand状态的名称。

这有意义吗,还是我应该使用更正确的命名约定?

c# wpf naming-conventions icommand

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