草庐IT

引用丢失

全部标签

c# - 如何获取当前任务引用?

如何获取对执行代码的任务的引用?ISomeInterfaceimpl=newSomeImplementation();Task.Factory.StartNew(()=>impl.MethodFromSomeInterface(),newMyState());...voidMethodFromSomeInterface(){TaskcurrentTask=Task.GetCurrentTask();//Nosuchmethod?MyStatestate=(MyState)currentTask.AsyncState();}因为我正在调用一些接口(interface)方法,所以我不能只将

c# - 按字节加载程序集会丢失位置

我想通过以下方式加载程序集varloadedAssembly=Assembly.Load(File.ContentsAsBytes);File.ContentAsBytes通过以下方法将dll作为byte[]返回System.IO.File.ReadAllBytes("dll位置");问题是加载的程序集(loadedAssembly)丢失了它的物理位置loadedAssembly.CodeBase-设置为加载它的程序集(这是不正确的)loadedAssembly.Location-为空有没有办法从byte[]加载并获得与Assembly.LoadFile类似的结果,因为我需要结果与一起

C# 泛型自引用声明

我一直在阅读Albaharis的“C#5.0inANutshell”,我在泛型部分遇到过这个,据说它是合法的:classBarwhereT:Bar{...}虽然我已经仔细阅读了整章,但它对我来说毫无意义。我一点也听不懂。谁能用一些易于理解的命名来解释它,比如:classPersonwhereT:Person{...}以及这种用法合适且有用的真实应用场景? 最佳答案 意思是T必须继承自Person.这是在基类中创建特定于类型的方法或属性或参数的典型方法,特定于实际的后代。例如:publicabstractclassBasewhereT

c# - T 上的泛型约束同时是引用类型和值类型?

我无法理解通用约束的工作原理。我想我在这里遗漏了一些重要的东西。我在评论中附上了我的问题,如果您能提供一些解释,我们将不胜感激。//1stexample:classCwhereT:classwhereU:struct,T{}//Abovecodecompileswell,//OnfirstsightitlookslikeUmightbereferencetypeandvaluetype//atthesametime.TheonlyreasonIcanthinkof,isthatTmaybean//interfacewhichstructcanimplement,AmIcorrect?/

C#:如何在 Visual Studio 中查找对特定类的等于运算符的引用

我想为一个类覆盖.Equals和==运算符。我需要检查目前是否在该类的任何地方使用任何相等比较。我该怎么做? 最佳答案 在这两种情况下,我都会添加重载/覆盖,然后使用“FindUsages”(在Resharper中)或“ViewCallHierarchy”(VisualStudionative)。如果出现任何情况,那将是一个变化。另一种方法(如果两者都不可用)是(只是在执行此操作时)将[Obsolete]添加到您添加的覆盖/重载方法中-然后是任何代码开始使用它们(即行为发生变化)将显示为警告。注意:如果覆盖(等于)是已经覆盖等于的继

c# - 构造内存 hack 以重叠对象引用 - 这可能吗?

我猜这个问题的答案将是“这不可能,切换到C++”。但我想我还是会把它扔出去。我正在处理一个巨大的二叉树。我有一个结构数组来表示分支节点,在遍历树时,我使用这些结构来帮助处理内存的局部性。为了节省一点内存,从而提高缓存的局部性,我正在研究重叠叶节点的对象引用。该对象引用将指向所有叶数据。基本上是这样的:[StructLayout(LayoutKind.Explicit)]structBranchData{[FieldOffset(0)]//1byteinternalbyteSplitIndex;[FieldOffset(1)]//4bytesinternalfloatSplitValue

c# - 在 WPF 中,如何在代码隐藏中引用资源库中的字体?

我有一个应用程序使用单独的资源库程序集(但不是没有代码的纯资源程序集),我想在库中包含自定义字体。如果我将其.otf文件作为资源添加到执行程序集的项目(而不是资源库项目),使用以下代码将属性设置为BuildAction='Resource'和CopytoOutput='DoNotCopy':FontFamilyfont=newFontFamily(newUri("pack://application:,,,/"),"./Resources/#CustomFont"));//Resourcesisasubfolder但是,当我尝试将字体添加到资源库项目时,字体并未加载。我尝试使用以下代码

c# - 从并发字典中获取所有值并在不丢失数据的情况下清除它

我正在向并发字典中添加/更新对象并定期(每分钟)刷新字典,所以我的代码看起来像这样:privatestaticConcurrentDictionary_metrics=newConcurrentDictionary();publicstaticvoidIncrementCountMetricBy(stringname,intcount){_metrics.AddOrUpdate(....}publicstaticMetric[]Flush(){varflushedMetrics=_metrics;_metrics=newConcurrentDictionary();returnflus

c# - 保留一个 Dictionary<Type, MyClass<T>> ,其中元素可以按类型引用

我有一个名为EntityTypeTransform的抽象类,它有一个抽象方法,用于保存将IDataRecord转换为T实例的Func委托(delegate)。publicabstractclassEntityTypeTransformwhereTEntityType:class{publicabstractFuncGetDataTransform();}该类的实现可能看起来像(看起来像):publicclassTaskParameterEntityTypeTransform:EntityTypeTransform{publicoverrideFuncGetDataTransform()

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

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