通常在我处理LINQ序列时,我想将每个项目发送到返回void的方法,避免使用foreach循环.但是,我还没有找到一种优雅的方法来做到这一点.今天,我写了以下代码:
private StreamWriter _sw;
private void streamToFile(List<ErrorEntry> errors)
{
if (_sw == null)
{
_sw = new StreamWriter(Path.Combine
(Path.GetDirectoryName(_targetDatabasePath), "errors.txt"));
}
Func<ErrorEntry, bool> writeSelector =
(e) => { _sw.WriteLine(getTabDelimititedLine(e)); return true; };
errors.Select(writeSelector);
_sw.Flush();
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我编写了一个只返回true的lambda函数,我意识到Select方法将返回一个布尔序列 - 我将忽略该序列.然而,这看起来有点讽刺和下沉.有没有优雅的方法来做到这一点?或者我只是误用了LINQ?
谢谢.
假设我们有一个模板函数"foo":
template<class T>
void foo(T arg)
{ ... }
Run Code Online (Sandbox Code Playgroud)
我可以针对某些特定类型进行专业化,例如
template<>
void foo(int arg)
{ ... }
Run Code Online (Sandbox Code Playgroud)
如果我想对所有内置数值类型(int,float,double等)使用相同的特化,我会多次写这些行.我知道身体可以被扔到另一个功能,并且只是在每个专业的身体中调用它,但是如果我能避免为每种类型写出这个"void foo(...")会更好.是否有有没有可能告诉编译器我想对所有这些类型使用这个特化?
我们在公司网站上运行ASP.Net 2.0,我希望尽可能顺利地使用ASP.Net 3.5.VS 2005中的项目/解决方案体系结构是ASP.Net 2.0 Web项目和站点代码使用的.Net 2.0数据访问层项目.
在新的VS 2008解决方案中打开项目时,它们似乎转换为.Net 3.5,只需要少量工作 - 它们开箱即用,成功部署,似乎工作得很好,这正如我所期望的那样鉴于.Net 2.0和3.5共享一个共同的运行时.转换后的主要区别是web.config文件引用的dll现在是3.5版本.
我想做的是零碎地更新网站; 当我对给定页面进行修改时,将该页面的3.5版本发送到我们的网络服务器,而不是立即更新整个网站.在我们的开发盒测试中,这种方法似乎工作正常 - 站点代码与.Net 3.5数据访问层交互没有困难,少数页面运行3.5页面后面的代码(我的意思是他们是运行在VS 2008中构建的程序集 - 该站点使用单页程序集来代替后面的代码,3.5 web.config就位,并且该站点的大部分都运行在VS2005中构建的代码隐藏程序集.一切看起来都很棒.
这让我担心我错过了什么.这个架构是否可行,或者是否存在问题等待我没有考虑过?
asp.net visual-studio-2005 .net-3.5 visual-studio-2008 .net-2.0
因此,我想创建一个Android应用程序,以便在Android操作系统中注册(或者只是在系统启动时启动),当手机用户点击网页浏览器内网页上的特殊按钮时:
<a href="myapp://mysettings">Foo</a>
Run Code Online (Sandbox Code Playgroud)
我的应用程序将弹出并使用该URL中发送的参数运行.
那我该怎么做呢?
我需要一个代码教程!
我的系统是F'd.如何完全卸载rails,ruby和rubygems?
关于从哪里去重新安装的任何建议?最佳做法?我想回到3.0测试版
谢谢!
我需要修复ActiveRecord属性的编码,并决定在before_save挂钩中执行此操作.此时我发现了一个意想不到的功能.当我想要更改属性的值时,使用简单的方法attribute_name=XY并不像我预期的那样工作.而不是我需要使用self[:attribute_name]=XY.到目前为止我还没有认识到这种行为AR.attribute_name=XY.这是什么原因?这种行为是否与钩子或其他东西有关?谢谢你的解释.
我想将内联元素右对齐到div的右侧.我已经看到在一个跨度上应用了float ="right"以对齐它但是对我来说似乎在语义上不正确,因为浮动应该将"框"或块元素移动到容器元素的右侧或左侧.
我对Float的理解是错误的还是在容器DIV中右对齐内联元素的另一种方法.
我在Flex/AS3上工作(为简单起见)是一个XML编辑器.我需要提供撤消/重做功能.
当然,一种解决方案是在每次编辑时存储整个源文本.但是,为了节省内存,我想存储差异(这些差异也将用于将更新传输到服务器以进行自动保存).
我的问题是 - 我可以使用明文差异算法来跟踪这些XML更改吗?
我对互联网的研究表明我不能这样做.但是,我显然错过了一些东西.Plaintext diff提供的功能据称是:
diff(text, text') -> diffs
patch(text, diffs) -> text'
Run Code Online (Sandbox Code Playgroud)
XML只是文本,为什么我不能只使用diff()和patch()来可靠地转换文本?
例如:让我们说我是一个诗人.当我写诗时,我会使用很多时髦的标点符号......你知道,就像<,/和>.(你可能会看到我要去的地方...)如果我在一个使用差异提供撤消/重做功能的应用程序中编写我的诗歌,当我撤消/重做我的编辑时,我的诗歌会变得乱码吗?这只是文字!为什么它会对算法产生影响?
我显然在这里得不到什么......谢谢你的解释!:)
更新:
我遇到过一些关于使用明文算法区分XML的讨论:
另外,我知道Command模式可能是实现Undo/Redo的更好方法.为简单起见,我简化了我的用例,我仍然认为XML差异是最好的方法.
我正在为Dallmeier Common API light(相机和监控系统)编写C#包装器,并且之前从未编写过包装器,但是我使用了Canon EDSDK C#包装器。因此,我使用佳能包装纸作为编写Dallmeier包装纸的指南。
我目前在包装回调时遇到问题。在API手册中,它具有以下内容:
dlm_connect
int(unsigned long uLWindowHandle,
const char * strIP,
const char* strUser1,
const char* strPwd1,
const char* strUser2,
const char* strPwd2,
void (*callback)(void *pParameters, void *pResult, void *pInput),
void * pInput)
Run Code Online (Sandbox Code Playgroud)
参数
- ulWindowhandle -传递给ViewerSDK显示视频和消息有窗口的句柄
- strUser1 / 2 -用户的姓名登录如果只使用单一用户登录strUser2是。
-空
- strPwd1 / 2 -密码的两个用户。如果strUser2为NULL,则strPwd2将被忽略。
返回
值此函数创建必须传递的SessionHandle
回调
pParameter的结构如下:
-无符号长ulFunctionID-
无符号长ulSocketHandle,//已建立连接的套接字的句柄
-无符号长ulWindowHandle,-int
SessionHandle,//创建的会话的会话句柄
-const char * strIP,-const
char * strUser1,-const
char * strPwd1,-const char * strUser2,
-const
char * strPWD2
pResult是一个指向整数的指针,表示操作的结果。零成功。负值是错误代码。
因此,从网上和堆栈溢出的内容中我可以读到-C#使用委托进行回调。所以我创建了我的回调函数:
public …Run Code Online (Sandbox Code Playgroud)