草庐IT

强引用

全部标签

C# 如何根据对象引用计算哈希码

伙计们,这是一个棘手的问题!TickZoom系统的一部分必须将每种类型的对象的实例收集到Dictionary类型中。它们的相等性和哈希码必须基于对象的实例,这意味着引用相等而不是值相等。挑战在于系统中的某些对象已覆盖Equals()和GetHashCode()以用作值相等,并且它们的内部值会随时间变化。这意味着它们的Equals和GetHashCode是无用的。如何通用而非侵入性地解决此问题?到目前为止,我们创建了一个结构来包装每个名为ObjectHandle的对象,以便散列到字典中。正如您在下面看到的,我们实现了Equals(),但如何计算哈希码的问题仍然存在。publicstruc

c# - 发生压缩后GC如何更新引用

.NET垃圾收集器收集对象(回收它们的内存)并执行内存压缩(以将内存碎片保持在最低限度)。我想知道,由于一个应用程序可能有很多对对象的引用,当对象的地址由于GC进行的压缩而发生变化时,GC(或CLR)如何管理这些对对象的引用。 最佳答案 这个概念很简单,垃圾收集器简单地更新任何对象引用并将它们重新指向移动的对象。实现有点棘手,native代码和托管代码之间没有真正的区别,它们都是机器代码。对象引用并没有什么特别之处,它只是运行时的一个指针。收集器需要一种可靠的方法来找回这些指针并将它们识别为引用托管对象的类型。不仅要在压缩过程中移动

c# - 包含路径表达式必须引用 type.in 预加载中定义的导航属性

我尝试像这样包含匿名类型:除了CompanyTitle,PeriodTypeName之外,我还想要所有incomelist属性varincomeList=ctx.IncomeLists.Include(i=>new{CompanyTitle=i.CompanyId.ToString()+"/"+i.Company.CompanyName,PeriodTypeName=i.ListPeriods.Select(lp=>lp.PeriodType.PeriodTypeName)}).ToList()我的模型部分是这样的:但我得到以下异常:TheIncludepathexpressionmu

c# - C#中资源文件的动态引用

我有一个正在实现本地化的应用程序。我现在需要在资源文件中动态引用一个名称。假设我有一个名为Login.resx的资源文件,其中包含一些字符串:foo="hello"、bar="cruel"和baz="world"通常,我会这样称呼:字符串结果=Login.foo;结果=“你好”;我的问题是,在代码时,我不知道我是想引用foo、bar还是baz-我有一个包含“foo”、“bar”或“baz”的字符串。我需要这样的东西:登录["foo"];有谁知道有没有办法动态引用资源文件中的字符串? 最佳答案 您需要实例化一个ResourceMana

c# - 将 C# .dll 引用从绝对更改为相对

我已经编译了我的项目,并且我项目的一些添加的.dll具有绝对引用。当我尝试在另一台机器上运行我的项目时,它会从原始项目路径中查找.dll。如何让项目使用相对路径查找.dll? 最佳答案 编辑.csproj文件并更改从绝对路径到相对路径的元素。 关于c#-将C#.dll引用从绝对更改为相对,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5290886/

c# - 在静态方法中引用 "self"类型 - C#

我正在尝试创建一个返回类实例的静态方法,例如:classA{publicstaticAgetInstance(){returnnewA();}}我遇到的问题是,如果我有一个派生自A的子类B,我希望B.getInstance()返回B的实例,而不是A。在PHP世界中,您可以使用关键字“self"来引用你自己的类型,所以你的getInstance()看起来像:publicstaticfunctiongetInstance(){returnnewself();}解决这个问题的最佳方法是什么? 最佳答案 基本上,你不能。如果对仅在基类中声明

c# - 缺少 .NET 4.0 的引用程序集文件夹

好像是从.NET3.0开始,微软把一些常用的程序集移到了C:\ProgramFiles\ReferenceAssemblies\Microsoft\Framework\xxx为了支持他们拆分CLR2.0和CLR4.0GAC的努力(还添加了C:\%windir%\Microsoft.NET\assembly)。但是,虽然我两者都有C:\ProgramFiles\ReferenceAssemblies\Microsoft\Framework\xxx和C:\ProgramFiles\ReferenceAssemblies\Microsoft\Framework\.NETFramework\v

c# - 是否可以使用循环引用执行序列化?

因此,我的实体类(用C#编写)遵循父子模型,其中每个子对象都必须有一个Parent属性,在该属性中它保留对其父对象的引用。由于循环引用,此Parent属性会导致对象序列化出现问题。我无法删除对父级的引用,也无法将其标记为XmlIgnore(因为我需要在反序列化XML时读回它)对此有什么想法吗? 最佳答案 XML序列化不支持循环引用,您需要使用XmlIgnore属性从序列化中排除父属性。参见thisblogpost一种在反序列化时维持关系的方法。或者,您可以使用DataContractSerializer而不是XmlSerialize

c# - 无法使用实例引用访问成员 'object.Equals(object, object)';用类型名称限定它

当我在C#中使用以下代码时...inttotalValue=0;inttotal=0;totalValue=int.Parse(Session["price"].ToString())*int.Parse(Session["day"].ToString());//ThislinecausestheerrortotalValue+=Session["IsChauffeurUsed"].ToString().Equals("Yes",StringComparer.CurrentCultureIgnoreCase)?80:0;...我收到此错误:Member'object.Equals(ob

c# - 如何根据编译符号有条件地引用 DLL?

VisualStudio2013。我有一个外部DLL,我在csproj文件中像这样引用它:Path\To\Dll\NameOfDll.dll我希望此引用在编译器符号存在时起作用,而在该编译器符号不存在时不起作用。(为了解决下面的第一条评论,假设编译器符号称为Fred。)这个问题[ConditionalReference]让我觉得我可以将一个名为Condition的属性添加到上面显示的Reference元素,但我无法计算出赋予该属性什么值来实现我想要的效果。我很高兴能够在VSUI中执行此操作,但我会采用任何方法。 最佳答案 条件编译符