草庐IT

c# - 为什么我不能写 if (object is HashSet<>) 但如果我写 (object.GetType() == typeof(HashSet<>)) 就可以了

标题说明了一切,这里有一些格式相同:为什么我不会写publicboolIsHashSet(objectobj){returnobjisHashSet;}但这没关系:publicboolIsHashSet(objectobj){returnobj.GetType()==typeof(HashSet);}(同样适用于所有泛型并且不限于HashSet) 最佳答案 你的函数publicboolIsHashSet(objectobj){returnobj.GetType()==typeof(HashSet);}将返回false对于obj的每个

c# - 使用GetType()和typeof()获取Type有什么区别?

这个问题在这里已经有了答案:TypeChecking:typeof,GetType,oris?(15个答案)关闭去年。获取类型的首选方法是哪一种?

c# - typeof 泛型和强制类型

这个问题在这里已经有了答案:TypeChecking:typeof,GetType,oris?(15个答案)关闭3年前。假设我们有通用方法:publicvoidGenericMethod(Titem){vartypeOf=typeof(T);vargetType=item.GetType();}我们使用以下参数调用它:GenericMethod(1)GenericMethod((object)1)结果是:typeOf=System.Int32getType=System.Int32和typeOf=System.ObjectgetType=System.Int32有人能解释一下为什么转换

c# - 缓存 typeof(MyControl) 的返回值是否提供任何优化?

我看到一些nativeWPF控件散布着类似于以下的代码:staticMyControl{TypetypeFromHandle=typeof(MyControl);//WhichisusedinvariousplacesSomeProperty.OverrideMetadata(typeFromHandle,...);CommandManager.RegisterClassInputBinding(typeFromHandle,...);EventManager.RegisterClassHandler(typeFromHandle,...);}似乎以下代码具有相同的性能:staticM

c# - typeof(T) 与 Object.GetType() 性能对比

有没有人知道typeof(T)whereT:struct,例如,与t.GetType()wheretisaSystem.Object?ILdasm显示typeof(T)使用System.Type::GetTypeFromHandle(RuntimeTypeHandlehandle),而另一个只是普通的System.Object::GetType()。实现是[MethodImpl(MethodImplOptions.InternalCall)],所以这些方法是在CLR的native代码中定义的。所以,我只是想知道是否有人知道有什么理由比另一个更喜欢一个?编辑:让我澄清一下,我最感兴趣的是

c# - 为什么 typeof(Object[,][]).Name 等于 "Object[][,]"?

评估typeof(Object[,][]).Name给出Object[][,]类似地,typeof(Object[][,]).Name给出Object[,][]好像逗号在无缘无故地移动。什么给了? 最佳答案 混合参差不齐的和矩形的阵列是精神错乱的秘诀。您对给定类型表示法的含义的直觉几乎总是错误的,或者至少我的直觉是错误的。阅读我关于这个主题的文章,看看这是否有助于您理解这里发生的事情:http://blogs.msdn.com/b/ericlippert/archive/2009/08/17/arrays-of-arrays.asp

c# - nameof 和 typeof 的区别

如果我错了请纠正我,但是做一些类似的事情vartypeOfName=typeof(Foo).Name;和varnameOfName=nameof(Foo);应该给你完全相同的输出。根据此来源,可以理解的原因之一:https://msdn.microsoft.com/en-us/library/dn986596.aspx是吗"Usingnameofhelpskeepyourcodevalidwhenrenamingdefinitions"如果您想将类实例作为字符串获取,不可能那样做:varfooInstance=newFoo();varnameOfName=nameof(fooInsta

c# - 为什么没有隐式typeof?

我想我明白为什么这个小的C#控制台应用程序无法编译:usingSystem;namespaceConsoleApp1{classProgram{staticvoidWriteFullName(Typet){Console.WriteLine(t.FullName);}staticvoidMain(string[]args){WriteFullName(System.Text.Encoding);}}}编译器引发CS0119错误:'Encoding'isatypewhichisnotvalidinthegivencontext.我知道我可以通过使用typeof()从它的名字产生一个Typ

c# - 为什么 "lock (typeof (MyType))"是个问题?

MSDN对C#中的lock关键字给出了以下警告:Ingeneral,avoidlockingonapublictype,orinstancesbeyondyourcode'scontrol.Thecommonconstructslock(this),lock(typeof(MyType)),andlock("myLock")violatethisguideline:*lock(this)isaproblemiftheinstancecanbeaccessedpublicly.*lock(typeof(MyType))isaproblemifMyTypeispubliclyaccessi

c# - 为什么 Assert.IsInstanceOfType(0.GetType(), typeof(int)) 会失败?

我是单元测试的新手,使用Microsoft.VisualStudio.TestTools.UnitTesting;0.GetType()其实就是System.RuntimeType,那么我需要写什么样的测试才能通过Assert.IsInstanceOfType(0.GetType(),typeof(int))?---跟进,这是我自己的用户错误...Assert.IsInstanceOfType(0,typeof(int)) 最佳答案 将调用更改为以下内容Assert.IsInstanceOfType(0,typeof(int));第