我正在看一些代码,它有这样的声明:
~ConnectionManager()
{
Dispose(false);
}
Run Code Online (Sandbox Code Playgroud)
该类实现了IDisposable
接口,但我不知道这是否是使用波浪号(〜)的一部分.
我想写一些像javascript中的confirm()一样的东西,但是我想自己编写它以便我可以为对话框设置外观.难以思考我将如何基本上强制javascript线程等待用户响应然后返回true或false.
我记得在多次和多个地点阅读时,在解雇典型事件时:
protected virtual OnSomethingHappened()
{
this.SomethingHappened(this, EventArgs.Empty);
}
Run Code Online (Sandbox Code Playgroud)
如果没有有趣的事件参数,则应该是EventArgs.Empty,而不是null.
我遵循了我的代码中的指导,但我意识到我不清楚为什么这是首选技术.为什么声明的合约更喜欢EventArgs.Empty而不是null?
寻找C#和C++的答案.(在C#中,用'finalizer'替换'析构函数')
我试图在他们创建的疯狂情况下向某人展示接口的用途.它们在列表中有几个不相关的对象,需要对每个对象中的两个字符串属性执行操作.我指出,如果他们将属性定义为接口的一部分,他们可以使用接口对象作为作用于它的方法参数的类型; 例如:
void PrintProperties(IEnumerable<ISpecialProperties> list)
{
foreach (var item in list)
{
Console.WriteLine("{0} {1}", item.Prop1, item.Prop2);
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎一切都很好,但是需要处理的列表不是(也不应该)使用接口作为类型参数声明.但是,您似乎无法转换为其他类型参数.例如,这失败了,我无法理解为什么:
using System;
using System.Collections.Generic;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
List<Test> myList = new List<Test>();
for (int i = 0; i < 5; i++)
{
myList.Add(new Test());
}
PrintList((IEnumerable<IDoSomething>)myList);
}
static void PrintList(IEnumerable<IDoSomething> list)
{
foreach (IDoSomething item in list)
{
item.DoSomething();
}
}
}
interface IDoSomething
{
void DoSomething();
}
public class Test : IDoSomething …
Run Code Online (Sandbox Code Playgroud) 我需要在我的sql脚本中找到"(+)"的出现位置(即Oracle外连接表达式).意识到"+","("和")"都是特殊的正则表达式字符,我试过:
grep "\(\+\)" *
现在这确实返回"(+)"的出现,但也返回其他行.(看起来在同一条线上有任何开放和关闭的parens.)回想一下parens只适用于扩展grep,我试过:
grep "(\+)" * grep "(\\+)" *
这两个都只返回包含"()"的行.因此,假设"+"无法转义,我尝试了一个老技巧:
grep "([+])" *
这样可行.我用非正则表达式工具交叉检查结果.
问题:有人可以用"+"字符解释究竟发生了什么吗?在"(+)"上匹配的方式是否较少?
(我正在使用cygwin grep命令.)
编辑:谢谢你的解决方案.- 现在我看到,根据Bruno引用的GNU grep手册," \+
"在基本表达式中使用时,"+"表示扩展含义,因此匹配一个或多个"("s后跟一个") ".在我的文件中,总是"()".
我需要为元素属性动态构造XPath查询,其中属性值由用户提供.我不确定如何清理或清理此值以防止XPath等同于SQL注入攻击.例如(在PHP中):
<?php
function xPathQuery($attr) {
$xml = simplexml_load_file('example.xml');
return $xml->xpath("//myElement[@content='{$attr}']");
}
xPathQuery('This should work fine');
# //myElement[@content='This should work fine']
xPathQuery('As should "this"');
# //myElement[@content='As should "this"']
xPathQuery('This\'ll cause problems');
# //myElement[@content='This'll cause problems']
xPathQuery('\']/../privateElement[@content=\'private data');
# //myElement[@content='']/../privateElement[@content='private data']
Run Code Online (Sandbox Code Playgroud)
特别是最后一个让人想起昔日的SQL注入攻击.
现在,我知道会有包含单引号和包含双引号的属性的属性.由于这些是作为函数的参数提供的,因此对这些函数进行消毒的理想方法是什么?