小编Ric*_*ard的帖子

Dictionary.ContainsKey() - 它是如何工作的?

我已经阅读了关于如何Dictionary.ContainsKey()工作的MSDN文档,但我想知道它实际上是如何进行相等比较的?基本上,我有一个键入引用类型*的字典,我希望该ContainsKey()方法检查该引用类型的某个属性作为确定密钥是否存在的基础.举例来说,如果我有一个Dictionary(MyObject, int)MyObject拥有(的公共财产int被称为"TYPEID"),我能得到ContainsKey(MyObject myObject)检查,看是否的关键之一具有TypeID等于myObject?我可以超载==操作员吗?

  • 引用类型是一个名为"Duration"的对象,它包含一个value(double Length); "持续时间"是我的音乐节目中使用的基本类型,表示特定声音持续多长时间.我从中派生出类,其中包含更复杂的时序概念,如西方音乐时间签名,但希望所有这些都在长度方面具有可比性.

编辑:正如所建议的,我在我的对象上实现了IEquitable,如下所示:

 public class Duration : IEquatable<Duration>
 {
    protected double _length;

    /// <summary>
    /// Gets or Sets the duration in Miliseconds.
    /// </summary>
    public virtual double Length
{
        get
        {
            return _length;
        }
        set
        {
            _length = value;
        }
    }

// removed all the other code that as it was irrelevant

    public override bool Equals(object …
Run Code Online (Sandbox Code Playgroud)

.net c# idictionary reference-type

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

如何从AJAX调用触发浏览器的"基本身份验证"对话框?

我正在使用基本身份验证来保护仅在公司网络内部公开的一组WCF Web服务,我想知道当Web服务返回401时,是否有办法触发浏览器的凭据对话框从AJAX调用中显示错误?

目前,我的AJAX调用将401作为常规失败请求接收,并且不会提示浏览器执行任何操作.但是,如果我使用相同的URI并将其复制粘贴到浏览器的URL栏中,则返回的401会正确触发"基本身份验证"对话框.

有没有办法让AJAX回调告诉浏览器弹出该对话框?

javascript ajax wcf basic-authentication wcf-security

14
推荐指数
1
解决办法
6945
查看次数

C# 4:在静态类之间引发和订阅事件

在过去的几天里,我阅读了各种书籍并浏览了 MSDN 的文档,但我无法完成看似极其简单的任务。

简而言之,我想要做的就是:我有一个静态类 DBToolBox,它在 SQL 数据库上运行各种函数,并且我希望它有一个独立于 UI 的错误报告系统。我想使用一个事件在日志(DataTable)更新时发出信号,以便另一个静态类(带有 DataGridView 的 Windows 窗体)将刷新自身。这是我无法工作的代码:

信令类:

public static class DBTools
{
public static readonly DataTable ErrorLog = new DataTable();
public static event EventHandler LogUpdated = delegate {};
// the actual functionality of the class

    private static void Error(Exception Ex, string MethodName)  
    {


        ErrorLog.Rows.Add((); 
        //logs the error with a bunch of data that I'm not listing here 

        LogUpdated(null, EventArgs.Empty); //I attempt to raise an event


    }

 }
Run Code Online (Sandbox Code Playgroud)

反应类:

public static partial class ErrorWindow …
Run Code Online (Sandbox Code Playgroud)

c#

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

Dynamics CRM 2011 - 通过插件阻止实体创建

问题:我们使用CRM for Outlook插件自动记录我们的支持电子邮件,但员工之间的内部电子邮件(其中一些包含敏感信息)也会被记录.

理想的解决方案:我正在尝试编写一个事件前("创建电子邮件"消息)插件来阻止内部电子邮件的自动记录,但(显然)阻止消息被执行的唯一方法是抛出异常事件前阶段,但这总是导致在outlook中显示错误消息(我们显然不能拥有).根据文档,只有"InvalidPluginExecutionExeception"应该向用户显示消息,但事实并非如此,因为所有异常都会导致用户的Outlook应用程序中出现错误消息.

潜在的解决方案:还有一条"CheckPromoteEmail"消息(根据文档)确定是否应该将电子邮件提升为CRM(我假设"提升为CRM"意味着"使电子邮件实体存储在CRM中") ,但我在上下文中找不到任何可以告诉CRM不推广电子邮件的内容.是否有一些标记隐藏在我可以设置的上下文中,或者某种方式来放置电子邮件,以便CRM自己的逻辑决定不存储它?

解决方法解决方案:我知道(此处提到)的唯一其他解决方案,只是在创建电子邮件后清除主题和内容,但我宁愿停止创建电子邮件,而不是编辑或删除经过时间和资源浪费创建电子邮件.

是否有一种干净的方法来阻止插件的操作?或者从哪里来?如果没有,有谁知道为什么微软不提供此功能?如果操作失败,他们已经具备了强大的回滚功能,他们为什么不给我一种方法来调用回滚?

这是我的代码,以防它回答我的问题:

public class InternalEmailFilter : IPlugin
{
    void IPlugin.Execute(IServiceProvider serviceProvider)
    {
        IPluginExecutionContext _context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        Entity e = (Entity)_context.InputParameters["Target"];
        bool shouldStore = ShouldStoreInCRM(e);

        if (shouldStore == false)
        {
            throw new Exception(); //attempting to stop the operation without an InvalidPluginExecutionException, but still results in error message to user
        }            
    }

    protected bool ShouldStoreInCRM(Entity e)
    {

           List<Entity> parties = new List<Entity>();

            var atttributes = e.Attributes;
            if (atttributes.ContainsKey("to") …
Run Code Online (Sandbox Code Playgroud)

c# plugins dynamics-crm-2011

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

C# - TableLayoutPanel切断标签字符串

我正在创建一个表格布局面板来显示字典中的值,但是表格布局面板不断切割我放入单元格的14个字符的Label控件.我试图摆弄我的表布局面板的ColumnStyles,但没有一个选项会使Label控件真正"适合"进入单元格.我已经尝试了所有可用的列样式SizeTypes:

自动调整大小(带有文本值的标签每次都会裁剪为14个字符("1234567890ABCD"),尽管没有控件的列(间隔符)会缩小为空)

百分比(没有任何影响 - 即使我将列类型(值,键,空格)加权为不同大小,也没有列更宽.)

绝对(使列x像素宽,但标签仍然以14个字符切断 - 即使单元格宽度为1,000像素)

我也试过搞乱标签的Size属性,但我无法编辑,因为我"无法修改'System.Windows.Forms.Control.Size'的返回值,因为它不是变量"(无论如何)这意味着).

因此,在完成所有这些选项后,如何使完整标签出现在表格单元格中而不会被切断为14个字符?

这是生成表格布局面板的代码.它使用我构建的自定义类(GridDisplay)来保存包含Control,行号,列号和一些其他字段的对象列表(GridDisplayCell).该类允许我添加/删除/移动/插入控件到列表,然后使用Generate()函数一次性构建表格布局(而不是提前确定它的大小或在我添加项目时重新调整大小).

       private void FillInCustomerData()
    {
        GridDisplay grid = new GridDisplay(tl_TopLeft);
        int rowMax = 8;
        int columnLabelIndex = 0;

        int curRow = 0;
        int curCol = 0;

        foreach (var item in DD.AllCustomerData["BasicInfo"]) //Dictionary<string, object>
        {
            if (curRow == rowMax)
            {
                curRow = 0;
                curCol = columnLabelIndex + 2; //1 for key column, 1 for value column
            }

            var keyLabel = new Label();
            keyLabel.Text = item.Key;

            var valueLabel = new Label();
            valueLabel.Text …
Run Code Online (Sandbox Code Playgroud)

c# label tablelayoutpanel winforms

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