草庐IT

分配数

全部标签

c# - 如何在 C# 中检查运行时类型的可分配性?

Type类有一个方法IsAssignableFrom()几乎可以工作。不幸的是,它仅在两种类型相同或第一种类型位于第二种类型的层次结构中时才返回true。它说decimal不能从int分配,但我想要一个方法来指示decimal可以从分配int,但是int并不总是可以从decimal分配。编译器知道这一点,但我需要在运行时弄清楚。这是对扩展方法的测试。[Test]publicvoidDecimalsShouldReallyBeAssignableFromInts(){Assert.IsTrue(typeof(decimal).IsReallyAssignableFrom(typeof(i

c# - 为什么未分配的局部变量不自动初始化?

似乎没有办法在您的代码中包含未分配的局部变量或检查它们,因为编译器会吐出Useofunassignedlocalvariable错误。为什么编译器在编译时不对这些变量使用default(T)?即使对值类型做起来更难,在这种情况下引用类型也可以很容易地初始化为null,对吧?这是一些测试代码:publicvoidTest(){intx;strings;if(x==5)Console.WriteLine(5);if(s!=null)Console.WriteLine("s");}返回:Useofunassignedlocalvariable'x'Useofunassignedlocalva

c# - C# List<char[]> 是否分配在连续内存中?

如果我声明一个char数组列表,它们是分配在连续的内存中,还是.NET创建一个链接列表?如果它不是连续的,有没有办法声明一个连续的char数组列表?char数组的大小是预先知道的并且是固定的(它们的大小都相同)。 最佳答案 是的,但不是您想要的方式。List保证它的元素是连续存储的。数组是引用类型,因此引用连续存储为List保证。但是,数组本身是单独分配的,它们的存储位置与列表无关。它只关心它的元素,即引用。如果您需要,那么您应该只使用一个大数组并维护边界数据。编辑:根据您的评论:Theinnerarraysarealways9ch

c# - 类中声明的变量的内存分配

因为Value类型变量在堆栈中分配内存,而Reference类型在堆中分配它。那么在引用类型(例如类)中声明值类型变量(例如inti=4;)时,内存是如何分配的。.NET中值类型和引用类型以及引用类型范围内的值类型的整体内存分配是如何工作的。请对其进行解释或提供任何相关链接。 最佳答案 Avaluetypevariableallocatesmemoryonthestackwhereasareferencetypeallocatesitinheap.不,这种说法是完全错误的。很多人相信这一点,但正如您所发现的,这显然是错误的。Howi

c# - 在 OOP 中覆盖方法与分配方法委托(delegate)/事件

这是一个有点奇怪的oop问题。我想创建一组对象(在设计时已知),每个对象都有与之关联的某些功能。我可以通过为我的对象提供可以包含“代表”的属性来做到这一点:publicclassStateTransition{FuncCondition{get;set;}ActionActionToTake{get;set;}FuncVerifyActionWorked{get;set;}}StateTransitionfoo=newStateTransition{Condition=()=>{//...}//etc};或者,我可以使用一个抽象类并为我想创建的每个对象实现它:publicabstrac

c# - User.IsInRole() 在角色分配后不工作,但在重新登录后工作

在ASP.NETMVC5应用程序中,我使用Unity容器创建OWIN/Identity对象并解析所有依赖项。问题是当我注册为新用户并给他分配这样的角色时userManager.AddToRole(user.Id,"NewUser");...awaituserManager.UpdateAsync(user);它实际上在AspNetUserRoles表中创建了一条记录,但在那之后如果我用User.IsInRole("NewUser")检查他的角色我得到的是假的,除非我注销然后重新登录,否则它是真的。我猜问题可能出在Unity上下文中的身份对象(UserManager、RoleManage

c# - 分配免费委托(delegate)或其他方式通过地址调用方法?

我需要能够使用Mono在C#中基于函数指针调用单个方法。委托(delegate)为此工作得很好,这是他们的目的,但每次我设置委托(delegate)时他们似乎都分配52个字节(不是+=,而是使用=设置它,所以委托(delegate)总是引用一个且只有一个方法)。这个委托(delegate)每秒更改很多次,它会导致GC周期性地启动,我希望避免这种情况。我不介意初始内存分配,但有没有办法在我每次更改单个委托(delegate)值时阻止分配?如果不是,除了每次地址更改时不会分配任何内存的委托(delegate)之外,是否还有其他动态方式在C#中调用方法? 最佳答案

c# - 基于分配的权限功能的授权

我有三个表dbo.PermissionFunc,dbo.Roles,dbo.Permissions对于我的asp.netMVCwebapplication.dbo.PermissionFunc包含我项目中的所有函数名称。dbo.Roles包含用户角色,例如管理员、用户、子用户等dbo.Permissions包含RolesId来自dbo.Roles和PermissionFuncId来自dbo.PermissionFunc.我要给authorization基于dbo.Permission中分配的值.Updateinquestion:Queryusingtodetermineifthecur

c# - GCHandle.Alloc 是否分配内存?

我正在使用SciTech的.NETMemoryProfiler来降低程序的内存分配率和垃圾回收频率。令人惊讶的是,根据探查器,最大数量的分配似乎来自GCHandle.Alloc调用,我正在执行这些调用以将现有的.NET数组编码到nativeOpenGL。我的理解是调用GCHandle.Alloc不会分配内存,它只会将现有内存固定在托管堆上?是我错了还是分析器错了? 最佳答案 .NETreferencesource任何人都可以看到,您可以自己看看并找出答案。如果深入研究GCHandle.Alloc,您会看到它调用了一个名为Intern

c# - 为什么在调用之前为事件分配处理程序?

基本上,我经常看到这个:publiceventMyEventHandlerMyEvent;privatevoidSomeFunction(){MyEventHandlerhandler=this.MyEvent;if(handler!=null){handler(this,newMyEventArgs());}}当它可以像这样轻松完成时:publiceventMyEventHandlerMyEvent;privatevoidSomeFunction(){if(MyEvent!=null){MyEvent(this,newMyEventArgs());}}那么,我是不是漏掉了什么?人们是