有没有办法计算只读文件的校验和?
我见过的唯一例子就是使用这样的算法
public string GetChecksum()
{
FileStream file = new FileStream(_filePath, FileMode.Open);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
foreach (byte t in retVal)
{
sb.Append(retVal[1].ToString("x2"));
}
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud) 我注意到泛型的一个非常奇怪的重载解决问题......
请考虑以下方法:
static void Foo<TSource>(TSource element, Func<TSource, int> selector)
{
"int".Dump();
}
static void Foo<TSource>(TSource element, Func<TSource, double> selector)
{
"double".Dump();
}
static T Identity<T>(T value)
{
return value;
}
Run Code Online (Sandbox Code Playgroud)
(C#4,在LINQPad中测试)
如果我尝试Foo使用lambda表达式作为选择器调用,一切正常:
Foo(42, x => x); // prints "int"
Run Code Online (Sandbox Code Playgroud)
但是,如果我替换x => x为Identity,编译器无法在2个Foo重载之间做出决定:
Foo(42, Identity);
// The call is ambiguous between the following methods or properties:
// 'UserQuery.Foo<int>(int, System.Func<int,int>)' and
// 'UserQuery.Foo<int>(int, System.Func<int,double>)'
Run Code Online (Sandbox Code Playgroud)
如何将第二次重载作为有效候选者?类型推断正确判断TSource是int …
我正在以编程方式制作NSTableView,但由于某些原因,无论我做什么,我都无法让darn headerView显示出来.我必须以编程方式执行此操作而不使用IB,因为我实际上是在名为clozure cl的IDE中开发此小部件,这是一个包含可可桥的lisp ide.最初我认为这个问题可能是由我的开发环境引起的,但我只是在Xcode中使用目标C创建了一个例子,似乎问题仍然存在.我所做的非常简单:
我在IB中创建了一个窗口,在我的awkefromnib方法中,我创建并设置了一个表视图,这里是代码:
- (void)awakeFromNib {
mydatasource *data = [[mydatasource alloc] init];
NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"id"];
NSTableView *table = [[NSTableView alloc] initWithFrame: [[self
contentView]frame]];
[table setDataSource:data];
[table addTableColumn:column];
[table addTableColumn:column];
[[self contentView] addSubview:table];
}
Run Code Online (Sandbox Code Playgroud)
这是我的数据源对象的代码:
- (int)numberOfRowsInTableView:(NSTableView *)aTableView
{
printf("NUM ROwS");
return 4;
}
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
printf("THE OTHER ONE");
return @"OKAY";
}
Run Code Online (Sandbox Code Playgroud)
使用这段代码,我得到一个包含两个列和四行的窗口,每个单元格显示字符串"OKAY",除了表没有标题外,这一切都很好.这可能是有意义的,除非我查看表头方法,它有一个初始化的头,其框架的值是有意义的.我只是想知道为什么我没有看到它.我需要做一些特殊的魔术才能显示标题吗?我似乎无法在文档中找到任何线索.再一次,必须以编程方式完成这个lisp ide,所以没有建议使用我知道将有一个工作headerView的IB没有帮助.非常感谢.
我试图教自己用Tcl编程.我自己设定的任务是激励我学习Tcl是为了解决8皇后问题.我创建程序的方法是先后"原型化"解决方案.
我已经问过一个与正确布局嵌套for循环相关的早期问题并得到了一个有用的答案.
令我沮丧的是,我发现我的代码的下一个开发会产生相同的解释器错误:"wrong#args"
我一直小心在while循环命令之前的行末尾有一个开括号.我也尝试将while循环的参数放在括号中.这会产生不同的错误.我真诚地试图理解Tcl语法手册页 - 不太成功 - 由我之前的问题的回答者提出.这是代码
set allowd 1
set notallowd 0
for {set r1p 1} {$r1p <= 8} {incr r1p } {
puts "1st row q placed at $r1p"
;# re-initialize r2 'free for q placemnt' array after every change of r1 q pos:
for {set i 1 } {$i <= 8} {incr i} { set r2($i) $allowd }
for { set r2($r1p) $notallowd ; set r2([expr $r1p-1]) $notallowd ;
set r2([expr $r1p+1]) $notallowd ; set r2p …Run Code Online (Sandbox Code Playgroud) 我正在尝试克隆一个feildset然后提交输入的内容并选择使用序列化.它工作正常,但选择不保持其价值.我已经尝试了几种我找到的方法,但似乎没有任何效果.这是我克隆和设置当前数据的方式.
克隆时如何保持select的值?
$('body').append('<form id="form-to-submit" style="visibility:hidden;"></form>');
var fieldsetName = $this.parents('.fieldsetwrapper');
$('#form-to-submit').html($(fieldsetName).clone());
var data = $('#form-to-submit').serialize();
Run Code Online (Sandbox Code Playgroud) 我有一些继承的代码,它system.net/mailSettings/smtp在Web.config 的部分中存储SMTP服务器,用户名和密码.
它曾经像这样读取它们:
Configuration c = WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
MailSettingsSectionGroup settings = (MailSettingsSectionGroup)c.GetSectionGroup("system.net/mailSettings");
return settings.Smtp.Network.Host;
Run Code Online (Sandbox Code Playgroud)
但是当我不得不部署到中等信任环境时,这种情况就失败了.
所以按照这个问题的答案,我重写它使用GetSection()如下:
SmtpSection settings = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
return settings.Network.Host;
Run Code Online (Sandbox Code Playgroud)
但它仍然在中等信任上给我一个SecurityException,并带有以下消息:
尝试访问配置部分'system.net/mailSettings/smtp'时,ConfigurationPermission请求失败.要允许所有调用者访问此部分的数据,请在声明此部分的配置文件中将section属性'requirePermission'设置为等于'false'.
所以我尝试了这个requirePermission属性,但无法弄清楚放在哪里.
如果我将它应用于<smtp>节点,我会得到一个ConfigurationError:"无法识别的属性'requirePermission'.请注意,属性名称区分大小写."
如果我将它应用于<mailSettings>节点,我仍然会得到SecurityException.
有没有办法在中等信任下以编程方式获取此配置部分?或者我应该放弃它并将设置移动到<appSettings>?
好的,我昨天问了这个问题:
Twitter客户端中的AutoLink @mentions
我正确地连接了@mentions.但为了让它工作,我不得不把android:autoLink ="web"用于我的xml for TextView.所以现在我获得了@mentions的链接,但它不再链接URL.我尝试做两个单独的Linkify.addLinks()调用,如下所示:
mentionFilter = new TransformFilter() {
public final String transformUrl(final Matcher match, String url) {
return match.group(1);
}
};
// Match @mentions and capture just the username portion of the text.
//pattern = Pattern.compile("@([A-Za-z0-9_-]+)");
pattern = Pattern.compile("(@[a-zA-Z0-9_]+)");
scheme = "http://twitter.com/";
tweetTxt = (TextView) v.findViewById(R.id.tweetTxt);
Linkify.addLinks(tweetTxt, pattern, scheme, null, mentionFilter);
Linkify.addLinks(tweetTxt, Linkify.WEB_URLS);
Run Code Online (Sandbox Code Playgroud)
但是最后被称为最后被应用的那个.任何人都可以告诉我如何将它链接到@mentions并仍然自动链接URL?
编辑以澄清更多的代码.
我一直在重构一些最初使用MessengerMVVM Foundation的代码,现在使用MessengerMVVM Light Toolit.我似乎无法找到等效的一件事是你要做的就是发送一个令牌(即令牌既作为消息的唯一标识符又作为消息本身).
原始代码(MVVM Foundation) - 一个字符串可以完成所有操作
// send code
mvvmFoundationMessenger.NotifyColleagues("QuestionTimedOut");
// register code
mvvmFoundationMessenger.Register(
"QuestionTimedOut",
() => UpdateOnQuestionTimedOut());
Run Code Online (Sandbox Code Playgroud)
新代码(MVVM Light) - 有比这更优雅的解决方案吗?
// send code
mvvmLightMessenger.Send("QuestionTimedOut", "QuestionTimedOut");
// register code
mvvmLightMessenger.Register<string>(
this,
"QuestionTimedOut",
token => UpdateOnQuestionTimedOut());
Run Code Online (Sandbox Code Playgroud)
我意识到我可以明确地新建一个,NotificationMessage但这将添加更多的代码.
我正在使用Application.Ontime事件从单元格中提取时间字段,并安排子程序在此时运行.我的Application.Ontime事件在Workbook_BeforeSave事件上运行.因此,如果用户(更改所需时间+保存工作簿)多次,则会创建多个Application.Ontime事件.从理论上讲,我可以使用唯一的时间变量跟踪每个事件..但有没有办法检查/解析/取消待处理事件?
Private Sub Workbook_BeforeSave
SendTime = Sheets("Email").Range("B9")
Application.OnTime SendTime, "SendEmail"
End Sub
Private Sub Workbook_BeforeClose
Application.OnTime SendTime, "SendEmail", , False
End Sub
Run Code Online (Sandbox Code Playgroud)
因此,如果我:
将B9更改为12:01,将工作簿
更改为B9保存到12:03,将工作簿
更改B9保存到12:05,将工作簿
更改B9保存到12:07,保存工作簿
等
我最终解雇了多个事件.我只想要一场比赛(最近一场比赛)
如何在Workbook_BeforeClose事件中取消所有挂起事件(或至少枚举它们)?
我有一个程序需要在x86和x64环境中运行.它使用的是Oracle的ODBC驱动程序.我有一个Oracle.DataAccess.DLL的引用.但是,根据系统是x64还是x86,此DLL会有所不同.
目前,我有两个独立的解决方案,我维护两者的代码.这太残忍了.我想知道什么是正确的解决方案?
我的平台设置为"任何CPU".并且我的理解是VS应该将DLL编译为中间语言,这样如果我使用x86或x64版本则无关紧要.然而,如果我尝试使用x64 DLL,我收到错误"无法加载文件或程序集'Oracle.DataAccess,Version = 2.102.3.2,Culture = neutral,PublicKeyToken = 89b483f429c47342'或其中一个依赖项.加载格式不正确的程序."
我在32位机器上运行,所以错误信息是有意义的,但它让我想知道当我需要在x64上工作时我应该如何有效地开发这个程序.
谢谢.
c# ×3
android ×1
asp.net ×1
asp.net-3.5 ×1
cocoa ×1
cryptography ×1
excel ×1
generics ×1
jquery ×1
linkify ×1
macos ×1
mvvm ×1
mvvm-light ×1
nstableview ×1
objective-c ×1
ontime ×1
oracle ×1
tcl ×1
textview ×1
vba ×1
wpf ×1