草庐IT

强引用

全部标签

c# 锁定传递给方法的引用 - 不好的做法?

我有一个类似的方法:publicstaticvoidDoSomething(stringparam1,stringparam2,SomeObjecto){//.....lock(o){o.Things.Add(param1);o.Update();//etc....}}几点:以这种方式锁定是不好的做法吗?我应该锁定一个私有(private)静态对象吗?如果是,为什么? 最佳答案 为了尽量减少副作用,被锁定的对象不应是被操作的对象,而是指定用于锁定的单独对象。根据您的要求,有几个选项可用于处理此问题:变体A:私有(private)锁定

c# - 将 c# 按引用类型转换为匹配的非按引用类型

我使用反射检查C#方法的参数。该方法有一些输出参数,对于这些参数,我得到了IsByRef=true的返回类型。例如,如果参数声明为“outstringxxx”,则参数的类型为System.String&。有没有办法将System.String&转换回System.String?该解决方案当然不仅适用于System.String,而且适用于任何类型。 最佳答案 使用Type.GetElementType().演示:usingSystem;usingSystem.Reflection;classTest{publicvoidFoo(re

C# 参数引用和 .net 垃圾回收

我一直在努力弄清楚.NET垃圾收集系统的复杂性,并且我有一个与C#引用参数相关的问题。如果我理解正确的话,方法中定义的变量存储在堆栈中,不受垃圾回收的影响。所以,在这个例子中:publicclassTest{publicTest(){}publicintDoIt(){intt=7;Increment(reft);returnt;}privateintIncrement(refintp){p++;}}DoIt()的返回值将为8。由于t的位置在堆栈上,因此该内存不能被垃圾回收或压缩,并且Increment()中的引用变量将始终指向t的正确内容.但是,假设我们有:publicclassTes

c# - 是否可以通过引用返回列表的一部分?

我的情况是我只想分配一个列表的另一个列表的一部分。如果可能的话,通过引用。到目前为止我所做的是这里:ListpartialList=originalList.Skip(start).Take(end-start).ToList();示例:一个包含6个元素的列表,开始为2,结束为4。InNewListElementN0N1Y2Y3Y4N5现在据我了解.ToList()它会创建原始结果的副本。因此,这将是按值而不是按引用。所以我的问题是:是否有任何“通过引用”的方式来实现我想要的结果? 最佳答案 您可以很容易地编写自己的切片类:publ

c# - 如何在 DNX Core 5.0 (ASP.NET 5) 中引用执行程序集?

我正在从.NET3.5-4.5移植一些代码。在我的程序集中,我有一些代码可以从当前正在执行的程序集中读取资源。但是,GetExecutingAssembly()不是DNX核心5.0中Assembly类型的方法。varxsdStream=Assembly.GetExecutingAssembly().GetManifestResourceStream(xsdPath);DNX核心5.0中Assembly.GetExecutingAssembly()的等价物是什么?或者,如果我需要一个命名空间来取回该方法(也许是一个扩展方法?),那么命名空间是什么? 最佳答案

c# - 无法使用实例引用访问;用类型名称限定它

在此MSDNtutorial上使用示例1:创建、启动和线程间交互更具体地说,Main()中的第3行到第7行我有以下错误的代码:cannotbeaccessedwithaninstancereference;qualifyitwithatypenameinstead.Program.cspublicstaticThreadTestthreadTest=newThreadTest();privatestaticThreadtestingThread=newThread(newThreadStart(threadTest.testThread()));staticvoidMain(strin

c# - 使用 Interlocked.Exchange 更新引用和 Int32

众所周知,引用在32位处理器中占用4字节内存,在64位处理器中占用8字节内存。因此,处理器保证以机器的自然字大小为增量对内存进行单次读取和写入将以原子方式执行。另一方面,Interlocked类中有2个方法:publicstaticintExchange(refintlocation1,intvalue)和publicstaticTExchange(refTlocation1,Tvalue)whereT:class那么,问题是为什么Int32和引用类型需要Interlocked.Exchange?因为它是原子的,所以仅仅使用简单的赋值不能安全地完成吗? 最佳

c# - 为什么要将子类对象赋值给父类引用变量?

我有以下代码。publicclassParent{publicvoidPrint(){Console.WriteLine("ParentMethod");}}publicclassChild:Parent{publicnewvoidPrint(){Console.WriteLine("ChildMethod");}}publicclassProgram{publicstaticvoidMain(){ChildC=newChild();C.Print();}}如果我运行这段代码,我会得到结果“ChildMethod”但是,如果我执行以下操作,为什么会得到结果“ParentMethod”?

c# - 进入 ADOMD.Net 的第一步 - 无法引用 Microsoft.AnalysisServices

有人可以帮我解决一下吗,因为谷歌没有提供答案。我有一个SharePoint2007设置,它通过一些Web部件使用SQLServer2008R2SSASOLAP多维数据集。作为C#开发人员,Sharepoint是一场噩梦,因此我决定我需要尝试掌握C#和OLAP交互。我的多维数据集都存在并且正在工作,所以我需要做的就是创建一个简单的C#应用程序,以便在我的脑海中把它全部弄清楚。我已经下载了Microsoft.AnalysisServicesv10.0.0.0,我可以在我的GAC中愉快地看到它,但我无法从我的VisualStudio2010C#4.0项目中添加引用。它只是没有出现。我已尝试将

c# - WPF 在 InitializeComponent 期间获取控件空引用

所以我在Window的构造函数中调用的InitializeComponent方法正在运行XML并添加控件并将它们插入到它们的事件中。因此,当其中一个控件的属性更改时,它会调用订阅该事件的方法。该方法引用了一个尚未构建的控件。为什么这里会按这个顺序发生?它在WinForms中有效,因为直到所有控件创建之后,事件才被触发。有没有办法在WPF中强制执行此操作?我看到的其他解决方案是我需要在初始化后订阅事件。每当我处理控件时,我都需要检查null。 最佳答案 我也遇到了这个问题,并通过在null检查中包装访问null控件的行来解决它。这似乎