我在C#(ApplicationClass
)中使用Excel互操作,并在我的finally子句中放置了以下代码:
while (System.Runtime.InteropServices.Marshal.ReleaseComObject(excelSheet) != 0) { }
excelSheet = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Run Code Online (Sandbox Code Playgroud)
虽然这种工作,Excel.exe
即使我关闭Excel后,该过程仍然在后台.只有在我的应用程序手动关闭后才会发布.
我做错了什么,或者是否有其他方法可以确保互操作对象得到妥善处理?
我有一个函数返回五个字符混合大小写.如果我对这个字符串进行查询,它将返回值而不管大小写.
如何使MySQL字符串查询区分大小写?
我在Mac上使用GIT.说够了.我有工具,我有经验.我想继续使用它.这里没有战争......
问题始终在于互操作性.大多数人都使用SVN,这对我来说很棒.Git SVN开箱即用,是一个没有多余装饰的解决方案.人们可以继续愉快地使用SVN,我不会丢失我的工作流程,也不会丢失我的工具.
现在......有些人和Mercurial一起来了.对他们来说很好:他们有他们的理由.但我找不到任何GIT HG开箱即用.我不想切换到HG,但我仍然需要与他们的存储库进行互操作.
你们中的任何人都知道一个简单的解决方案吗?
这可能是微不足道的,但我想不出更好的方法.我有一个COM对象,它返回一个变体,它变成了C#中的一个对象.我能把它变成int的唯一方法是
int test = int.Parse(string.Format("{0}", myobject))
Run Code Online (Sandbox Code Playgroud)
有更清洁的方法吗?谢谢
我有两个带字节和布尔数组的结构:
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct struct1
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] values;
}
[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct struct2
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public bool[] values;
}
Run Code Online (Sandbox Code Playgroud)
以下代码:
class main
{
public static void Main()
{
Console.WriteLine("sizeof array of bytes: "+Marshal.SizeOf(typeof(struct1)));
Console.WriteLine("sizeof array of bools: " + Marshal.SizeOf(typeof(struct2)));
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出:
sizeof array of bytes: 3
sizeof array of bools: 12
Run Code Online (Sandbox Code Playgroud)
似乎boolean
需要4个字节的存储空间.理想情况下boolean
,只需要一点(false
或true
,0
或1 …
如何将我的Kotlin转换Array
为varargs Java String[]
?
val angularRoutings =
arrayOf<String>("/language", "/home")
// this doesn't work
web.ignoring().antMatchers(angularRoutings)
Run Code Online (Sandbox Code Playgroud)
我正在玩F#和C#,并希望从C#调用F#代码.
我设法让它在Visual Studio中以相反的方式工作,方法是在同一个解决方案中有两个项目,并在F#项目中添加C#代码的引用.这样做之后,我可以调用C#代码,甚至在调试时逐步执行它.
我想要做的是F#代码来自C#而不是来自F#的C#代码.我在C#项目中添加了对F#项目的引用,但它的工作方式与以前不同.我想知道如果不手动完成这是否可行.
我现在正在写关于动态类型的文章,我给出了一个Excel互操作的例子.我之前几乎没有做任何Office互操作,它显示了.C#4 的MSDN Office Interop教程使用了_Worksheet
界面,但也有一个Worksheet
界面.我不知道有什么区别.
在我荒谬简单的演示应用程序(如下所示)中,要么工作正常 - 但如果最佳实践指示一个或另一个,我宁愿适当地使用它.
using System;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;
class DynamicExcel
{
static void Main()
{
var app = new Excel.Application { Visible = true };
app.Workbooks.Add();
// Can use Excel._Worksheet instead here. Which is better?
Excel.Worksheet workSheet = app.ActiveSheet;
Excel.Range start = workSheet.Cells[1, 1];
Excel.Range end = workSheet.Cells[1, 20];
workSheet.get_Range(start, end).Value2 = Enumerable.Range(1, 20)
.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
我试图避免深入研究COM或Office互操作性,只是强调C#4的新功能 - 但我不想做任何真正的,真的愚蠢的事情.
(在上面的代码中可能还有一些非常,非常愚蠢的东西,在这种情况下请告诉我.使用单独的开始/结束单元而不仅仅是"A1:T1"是故意的 - 它更容易看出它真的是一个范围20个细胞.其他任何东西都可能是偶然的.)
那么,我应该使用_Worksheet
或者Worksheet …
这是一个困扰我一段时间的问题.我完成了我的作业并检查了stackoverflow,至少找到了关于我的问题的两个主题: Git for Mercurial,如git-svn和 Git与Mercurial存储库的互操作性
我已经做了一些严肃的谷歌搜索来解决这个问题,但到目前为止没有运气.我还阅读了Git Internals的书,以及Mercurial Definitive Behind the Scenes来试图解决这个问题.我仍然有点疑惑为什么我找不到任何合适的git-hg类型的工具.
从我的角度来看,git-svn是其中一个主要特性,为什么我选择在工作中使用git而不是mercurial.它允许我使用我喜欢的工作流程,如果他们不在乎,没有其他人需要打扰.我只是没有看到使用中间hg repo来回转换的重点,正如其中一个链中所建议的那样.
所以无论如何,从我读过的内容来看,hg和git在概念设计上看起来非常相似.引擎盖下存在差异,但这些都不会阻止为hg创建git客户端.在我看来,远程跟踪分支和章鱼合并使得git比hg更强大.
那么,真正的问题是,为什么git-hg不存在(或者至少很难找到)有任何真正的原因吗?git用户(和开发人员)对他们的hg对手是否有一些敌意导致缺乏git-hg工具?你们有没有计划开发类似的东西,并公开上市?我可以自愿参加(尽管有非常微弱的C技能)参与完成这项工作.我只是没有完全的知识来自己开始这个.
这可能是结束所有DVCS战争的工具吗?