我已经阅读了关于如何Dictionary.ContainsKey()工作的MSDN文档,但我想知道它实际上是如何进行相等比较的?基本上,我有一个键入引用类型*的字典,我希望该ContainsKey()方法检查该引用类型的某个属性作为确定密钥是否存在的基础.举例来说,如果我有一个Dictionary(MyObject, int)和MyObject拥有(的公共财产int被称为"TYPEID"),我能得到ContainsKey(MyObject myObject)检查,看是否的关键之一具有TypeID等于myObject?我可以超载==操作员吗?
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) 我正在使用基本身份验证来保护仅在公司网络内部公开的一组WCF Web服务,我想知道当Web服务返回401时,是否有办法触发浏览器的凭据对话框从AJAX调用中显示错误?
目前,我的AJAX调用将401作为常规失败请求接收,并且不会提示浏览器执行任何操作.但是,如果我使用相同的URI并将其复制粘贴到浏览器的URL栏中,则返回的401会正确触发"基本身份验证"对话框.
有没有办法让AJAX回调告诉浏览器弹出该对话框?
在过去的几天里,我阅读了各种书籍并浏览了 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) 问题:我们使用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) 我正在创建一个表格布局面板来显示字典中的值,但是表格布局面板不断切割我放入单元格的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# ×4
.net ×1
ajax ×1
idictionary ×1
javascript ×1
label ×1
plugins ×1
wcf ×1
wcf-security ×1
winforms ×1