草庐IT

c# - 为什么 Func<...> 和 Action 不统一?

我发现自己一直想传递一个有返回值且没有输入的Func来代替Action,例如FuncDoSomething=...;Task.Run(DoSomething);在哪里,我真的不关心DoSomething的返回值。但是,这些类型并不统一,我最终结束了调用Task.Run(()=>{DoSomething();});有没有办法在不包装的情况下使这些类型统一?另外,它们不统一是否有好的设计原因? 最佳答案 您希望以下陈述为真:IfIhaveaFunc,IshouldbeabletouseitwhereanActionisrequired.

c# - 为什么不能将 Type 用作常量值?

引用MSDN-const(C#reference):Aconstantexpressionisanexpressionthatcanbefullyevaluatedatcompiletime.Therefore,theonlypossiblevaluesforconstantsofreferencetypesarestringandanullreference.根据:typeof(T)vs.Object.GetType()performance,typeof(T)是一个编译时表达式。那么为什么Type不能是常量值呢?以下代码不会编译:publicconstTypeINT_TYPE=ty

c# - 使用小数据类型(例如 short 而不是 int)是否会减少内存使用量?

我的问题基本上是关于C#编译器如何处理小型数据类型的内存分配。我确实知道,例如像add这样的运算符是在int上定义的,而不是在short上定义的,因此计算将被执行,就好像shorts是int成员一样。假设如下:没有与选择short作为数据类型相关的业务逻辑/验证逻辑我们不会对不安全的代码做任何事情是否尽可能使用short数据类型来减少我的应用程序的内存占用,是否建议这样做?或者使用short等不值得付出努力,因为编译器会分配int32的全部内存量,并在进行算术运算时添加额外的强制转换。任何有关假定的运行时性能影响的链接都将不胜感激。相关问题:WhyshouldIuseintinstea

c# - 值类型继承自 System.Object...为什么?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicates:Iseverythingin.NETanobject?HowdoValueTypesderivefromObject(ReferenceType)andstillbeValueTypes?你好,我就是不明白。System.Object是(我认为)引用类型,但.NET中的所有数据类型都继承自它。值类型也是如此。我不明白-值类型在堆栈上有它的值,但它是从Object继承的?希望任何人都可以帮助我理解

c# - 'typeof' 是如何工作的?

我很好奇C#中typeof的“方法体”会是什么样子(很确定我无法在反射器中找到它,因为它是关键字而不是方法)。我猜它等同于GetType(魔术将符号转换为字符串)。查看Reflector中的GetType(string)它调用了一个方法“PrivateGetType”,它调用了“RuntimeTypeHandle.GetTypeByName”,而RuntimeTypeHandle似乎有很多类型背后的逻辑,但GetTypeByName的东西没有显示在Reflector中。 最佳答案 如果你这样做:Typet=typeof(string

c# - XML 序列化错误 : 2 types both use the XML type name, 'Relationship',来自命名空间 ''

我在通过XML进行序列化时遇到问题,因为2个类使用一个类(尽管类不同!)称为关系。我尝试使用XML属性用另一个名称装饰其中的一个类,但它仍然给我以下错误:{"Types'SiteServer.Relationship'and'LocalServer.Relationship'bothusetheXMLtypename,'Relationship',fromnamespace''.UseXMLattributestospecifyauniqueXMLnameand/ornamespaceforthetype."}这是我的2个类(class),有人知道为什么吗??我使用了错误的属性吗?它似

c# - 使用 Type 变量转换对象

当然,以下是行不通的。有没有一种可能的方法,与此非常相似?TypenewObjectType=typeof(MyClass);varnewObject=givenObjectasnewObjectType; 最佳答案 newObjectType是Type类(包含有关类型的元数据)的实例,而不是type本身.这应该可行varnewObject=givenObjectasMyClass;或varnewObject=(MyClass)givenObject;转换为类型实例确实没有意义,因为编译时必须知道变量类型应该是什么,而类型实例是运行

C# 功能请求 : implement interfaces on anonymous types

我想知道做这样的事情需要什么:usingSystem;classProgram{staticvoidMain(){varf=newIFoo{Foo="foo",Print=()=>Console.WriteLine(Foo)};}}interfaceIFoo{StringFoo{get;set;}voidPrint();}创建的匿名类型看起来像这样:internalsealedclassf__AnonymousType0j__TPar>:IFoo{readonlyj__TPari__Field;publicf__AnonymousType0(j__TParFoo){this.i__Fi

c# - 检查对象类型是否继承了抽象类型

假设我有一个对象,someDrink。它可以是CocaCola或Pepsi类型,它们都继承了抽象的Cola(它继承了Drink)或任何类型喝那件事。我有一个方法可以返回一串最喜欢的饮料。publicstringPreferredDrink(DrinksomeDrink){varorderOfPreference=newList{typeof(Cola),typeof(PurpleDrank),typeof(LemonLimeBitters)...}foreach(drinkTypeinorderOfPreference){if(someDrink.GetType()==drinkTyp

c# - 什么 SqlDbType 映射到 varBinary(max)?

什么SqlDbType映射到varBinary(max)?SqlDbType.VarBinary说它限制为8K。SQLServer文档说varbinary(max)可以存储aprrox。2GB。但是SqlDbType.VarBinary说它限制为8K。 最佳答案 长度为-1的SqlDbType.VarBinary相当于VARBINARY(MAX),至少在理论上是这样。但是问题有点复杂,因为还有一个类型(不是枚举值),即SqlTypes.SqlBytes可以使用。还有SqlTypes.SqlFileStream当它们具有FILESTR