我看到这两个术语相当多(特别是在基于网络的场景中,但我认为它并不仅限于此),我想知道是否存在差异.
在我看来,他们都意味着你被允许做你正在做的事情.这只是一个命名法,还是意义上有一个基本的区别?
假设我们有这样的代码:
public class Observer
{
public event EventHandler X = delegate { };
}
public class Receiver
{
public void Method(object o) {}
}
public class Program
{
public static void DoSomething(object a, object b, Observer observer, Receiver r)
{
var rCopy = r;
EventHandler action1 = (s, e) => rCopy.Method(a);
EventHandler action2 = (s, e) => r.Method(b);
observer.X += action1;
observer.X += action2;
}
public static void Main(string[] args)
{
var observer = new Observer();
var receiver = new …Run Code Online (Sandbox Code Playgroud) 假设我在自定义控件中实现了一些UIA模式.说,TablePattern.如果出现任何问题,现有实现将返回null.但是调试起来不太方便.我可能在自动化同行中有更多的上下文.例如,因为GetItem(int row, int column)我可能会说提供的参数超出范围而不是仅返回null.
如果我从自动化对等端抛出异常 - 在UIA客户端,我TargetInvocationException从IUIAutomationPatternInstance对象获得没有任何细节(InnerException属性为null).
有没有办法让UIA通过UIA-服务器端到UIA-客户端的一些附加信息传递错误?
UPD:经过一些调查并与评论中提供的示例@SimonMourier进行比较,我发现这TargetInvocationException是我的错.在这里修复它.
现在我得到了正确的异常类型,但只有标准的异常消息.因为IndexOutBoundsException它是"索引超出了数组的范围." 不管我在UIA服务器端试图将其置于例外状态.
不同之处在于我试图不通过标准的托管UIAutomationClient调用UIA方法,而是使用我自己的代码一直到COM调用(标准托管库不支持我想使用的自定义UIA模式).标准库传递异常消息就好了.我试图追踪差异,发现以下内容:
private static extern int RawGridPattern_GetItem(SafePatternHandle hobj, int row, int column, out SafeNodeHandle pResult);.它返回HRESULT,由CheckError方法通过调用来处理Marshal.ThrowExceptionForHR(hr);.此时出现正确消息的异常,就像在UIA服务器端抛出一样.c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include\UIAutomationClient.idl为HRESULT GetItem ([in] int row, [in] int column, [out, retval] IUIAutomationElement ** element );.根据我对COM Interop的理解,重写返回值机制会自动检查HRESULT,必要时抛出异常,out result否则返回参数.除了异常消息由于某种原因没有被翻译之外,它确实存在.让我们创建WinForms应用程序(我在Windows Vista上运行Visual Studio 2008,但似乎所描述的情况几乎发生在从Win98到Vista的所有地方,在本机或托管代码上).
写这样的代码:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class Form1 : Form
{
private readonly Button button1 = new Button();
private readonly ComboBox comboBox1 = new ComboBox();
private readonly TextBox textBox1 = new TextBox();
public Form1() {
SuspendLayout();
textBox1.Location = new Point(21, 51);
button1.Location = new Point(146, 49);
button1.Text = "button1";
button1.Click += button1_Click;
comboBox1.Items.AddRange(new[] {"1", "2", "3", "4", "5", "6"});
comboBox1.Location = new Point(21, 93);
AcceptButton = button1;
Controls.AddRange(new Control[] {textBox1, comboBox1, …Run Code Online (Sandbox Code Playgroud) 好吧,我开始这个主题主要是为了分享我最近与社区一起使用git-tfs的经验.
如果有人还有别的东西可以分享 - 这对我也有帮助.
我有一个类应该在处理或最终时删除一些文件.在终结器中我不能使用其他对象,因为它们可能已经被垃圾收集了.
我是否遗漏了关于终结器的一些观点并且可以使用弦乐?
UPD:类似的东西:
public class TempFileStream : FileStream
{
private string _filename;
public TempFileStream(string filename)
:base(filename, FileMode.Open, FileAccess.Read, FileShare.Read)
{
_filename = filename;
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (_filename == null) return;
try
{
File.Delete(_filename); // <-- oops! _filename could be gc-ed already
_filename = null;
}
catch (Exception e)
{
...
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有两个不同版本的分支 - 一个用于当前开发,另一个是长期支持几年.结果他们显着不同.我有一些文件存在于两个分支中,但在开发中重命名.其中一个修复最初是在开发分支中进行的,但后来发现在支持分支中也是必需的.但是,cherry-pick报告该文件在支持分支中不存在(因为它在开发中被重命名并且在支持中具有不同的名称).
这个特定文件的内容是类似的,所以看起来补丁应该应用得很好 - 如果我可以直接git它应该应用它的文件.有没有办法(最好在命令行中)手动指导git做我需要的东西?
是否有可能从Visual Studio C#中的现有项目制作DLL文件?而不是给一个exe,我想为另一个人提供一个DLL文件,以便在他的代码中使用我的方法.我想把整个项目作为一个整体提供DLL.它已经是一个包含许多组件的大项目,但它的构建不正确,将这些代码转换为模块需要花费大量时间,因此我宁愿将整个项目作为dll.
谢谢你的帮助.
如果已将解决方案与TFS配置绑定,则在打开解决方案时VS会询问您:
---------------------------
Microsoft Visual Studio
---------------------------
Go Online
This solution is offline but its associated Team Foundation Server is available.
Would you like to go online with this solution after it has loaded?
---------------------------
Yes No Help
---------------------------
Run Code Online (Sandbox Code Playgroud)
或者,如果TFS不可用,则建议选择暂时脱机工作或删除绑定.
有没有办法压制这些对话框?
给你一些背景信息.我们团队的一部分直接与TFS合作,其他部分正在通过git-tfs工作.使用git-tfs时 - 我根本不需要在线模式.因此,每次我在解决方案中打开解决方案或重新加载项目时 - 我都应该一遍又一遍地回答相同的问题.但我无法删除绑定,因为直接使用TFS的人将失去无缝连接到TFS的能力.
看看ghci的这个输出:
Prelude> :t Data.Map.lookup
Data.Map.lookup :: Ord k => k -> Data.Map.Map k a -> Maybe a
Prelude> :t flip Data.Map.lookup
flip Data.Map.lookup :: Ord a => Data.Map.Map a a1 -> a -> Maybe a1
Prelude> let look = flip Data.Map.lookup
Loading package array-0.3.0.2 ... linking ... done.
Loading package containers-0.4.0.0 ... linking ... done.
Prelude> :t look
look :: Data.Map.Map () a -> () -> Maybe a
Run Code Online (Sandbox Code Playgroud)
为什么look推断类型与类型不同flip Data.Map.lookup?
给你一些背景信息.最初我有一个小程序,并试图找出它产生编译器错误的原因:
import qualified Data.Map as M …Run Code Online (Sandbox Code Playgroud)