为什么匿名函数作为方法的参数而不是构造函数参数?
如果我创建了一个List<string>,它有一个带有以下签名的Sort方法:
public void Sort(IComparer<T> comparer)
Run Code Online (Sandbox Code Playgroud)
以下工作地点:
List<string> list = new List<string>();
list.Sort( (a,b) => a.CompareTo(b) );
Run Code Online (Sandbox Code Playgroud)
SortedSet有一个具有类似签名的构造函数:
public SortedSet(IComparer<T> comparer)
Run Code Online (Sandbox Code Playgroud)
但是在构造函数中使用匿名函数时会失败.以下内容无效:
SortedSet<string> set = new SortedSet<string>( (a, b) => a.CompareTo(b) );
Run Code Online (Sandbox Code Playgroud)
创建排序类可以正常工作:
public class MyComparer : IComparer<string>
{
public int Compare(string a, string b)
{ return a.CompareTo(b); }
}
SortedSet<string> set = new SortedSet<string>( new MyComparer() );
Run Code Online (Sandbox Code Playgroud) 我的应用程序中的几个表单使用相同的"打开文件对话框".我需要每次复制"打开文件对话框"及其设置的代码.我想添加"打开文件对话框"来分隔DLL库以避免重复.我该怎么做 ?
WinForms,Visual Studio 2008.
关于这个问题已经有一些问题了.我认为我的问题有点不同,因为我没有实际问题,我只是在考虑学术兴趣.我知道Windows的UTF-16实现有时与Unicode标准(例如整理)相矛盾,或者更接近旧UCS-2而不是UTF-16,但我会在这里保留"UTF-16"术语,原因是简单.
背景:在Windows中,一切都是UTF-16.无论你是在处理内核,图形子系统,文件系统还是其他什么,你都要传递UTF-16字符串.Unix意义上没有语言环境或字符集.为了与中世纪版本的Windows兼容,有一个名为"codepages"的东西已经过时但仍然受到支持.AFAIK,只有一个正确且非过时的函数可以将字符串写入控制台,即WriteConsoleW采用UTF-16字符串.此外,类似的讨论也适用于输入流,我也会忽略它.
但是,我认为这代表了Windows API中的一个设计缺陷:有一个通用函数可以用来写入所有被调用的流对象(文件,管道,控制台......)WriteFile,但是这个函数是面向字节的,不是接受UTF-16字符串.文档建议使用WriteConsoleW控制台输出,这是面向文本的,和WriteFile对于其他一切,这是面向字节的.由于控制台流和文件对象都由内核对象句柄表示,并且控制台流可以重定向,因此必须为标准输出流的每次写入调用一个函数,以检查句柄是表示控制台流还是文件,从而破坏多态性.OTOH,我认为Windows在文本字符串和原始字节之间的分离(在许多其他系统中镜像,如Java或Python)在概念上优于Unix的char*方法,忽略编码并且不区分字符串和字节数组.
所以我的问题是:在这种情况下该怎么办?为什么即使在微软自己的库中也没有解决这个问题?.NET Framework和C和C++库似乎都遵循过时的代码页模型.您将如何设计Windows API或应用程序框架来规避此问题?
我认为一般问题(不容易解决)是所有库都假设所有流都是面向字节的,并在此基础上实现面向文本的流.但是,我们看到Windows在操作系统级别上确实有特殊的面向文本的流,并且库无法处理这个问题.因此,无论如何,我们必须对所有标准库进行重大更改.一种快速而肮脏的方法是将控制台视为一种特殊的面向字节的流,只接受一种编码.这仍然要求必须绕过C和C++标准库,因为它们没有实现WriteFile/ WriteConsoleWswitch.那是对的吗?
我目前正在做一个项目,我需要阻止用户拍摄任何网页的快照,为此他可以使用任何普通键盘中的"Print Scrn"/"Printscreen"键.
我一直试图找到它的解决方案,但是徒劳无功.如果可能的话,我需要考虑Firefox浏览器的" Screengrab "插件,也可以将其停止.
非常感谢任何帮助,我正在为我的项目使用PHP(作为服务器端语言)和jQuery.
假设我有一个窗口,其中有2个水平sppliters和一个按钮.如何通过单击按钮上/下移动分离器?
我对触发器中的事务有一些疑问,但我还没有找到答案.
CREATE TRIGGER A_AI ON A
AFTER INSERT AS
BEGIN TRY --is the try block 1 transaction ? or do I have to begin the transaction?
--BEGIN TRAN: may I start the transaction like this?
-- SOME DANGEROUS OPERATIONS
COMMIT --has this sense here?
END TRY
BEGIN CATCH --silent catch no rasing errors.
ROLLBACK TRANSACTION -- does it work without BEGIN TRANSACTION? if so, is it the whole try block?
END CATCH
GO
Run Code Online (Sandbox Code Playgroud) 我需要强大的密码验证正则表达式
Special Characters - Not Allowed
Spaces - Not Allowed
Numeric Character - At least one character
At least one Capital Letter
Minimum and Maximum Length of field - 6 to 12 Characters
Repetitive Characters - Allowed only two repetitive characters
Run Code Online (Sandbox Code Playgroud)
我的正则表达式^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s)(?=(?:(\w)(?!\1{2}))+).{6,12}$
但它忽略了特殊字符(在哪里添加?)
请帮忙!
如果有<c:url value="/article"/>一个jsp,我实际上想要它生产http://mysite.com/context/article.有没有简单的方法来实现这一点?
在我的形式我有三个输入字段名称,电子邮件,移动,但我想更改输入文本框像 -
name : _____________
email: _____________
mob : _____________
Run Code Online (Sandbox Code Playgroud)