草庐IT

Generics

全部标签

c# - 如何将 IEnumerable<T> 添加到现有的 ICollection<T>

给定一个现有的ICollection实例(例如dest)从IEnumerable添加项目的最有效和可读的方法是什么?在我的用例中,我有某种实用方法Collect(IEnumerableitems)它返回一个新的ICollection来自items的元素,所以我按以下方式进行:publicstaticICollectionCollect(IEnumerableitems)whereT:ICollection{...ICollectiondest=Activator.CreateInstance();items.Aggregate(dest,(acc,item)=>{acc.Add(ite

c# - 如何编写通用 IEnumerable<SelectListItem> 扩展方法

我对泛型相当陌生(好吧,真的很陌生),但我喜欢它们的想法。我将在一个View上有几个下拉列表,我想要一种通用的方法来获取对象列表并将其转换为SelectListItems列表我现在拥有的:publicstaticIEnumerableToSelectListItems(thisIEnumerableitems,longselectedId){returnitems.OrderBy(item=>item.Name).Select(item=>newSelectListItem{Selected=(item.Id==selectedId),Text=item.Name,Value=item

c# - 通用约束如何防止使用隐式实现的接口(interface)对值类型进行装箱?

我的问题与这个问题有些相关:Explicitlyimplementedinterfaceandgenericconstraint.但是,我的问题是编译器如何启用泛型约束以消除对显式实现接口(interface)的值类型进行装箱的需要。我想我的问题可以归结为两个部分:在访问显式实现的接口(interface)成员时要求对值类型进行装箱的幕后CLR实现发生了什么,以及删除此要求的通用约束会发生什么情况?一些示例代码:internalstructTestStruct:IEquatable{boolIEquatable.Equals(TestStructother){returntrue;}}

c# - new() 是什么意思?

WCFRIA服务中有一个AuthenticationBase类。类定义如下://assumeusingSystem.ServiceModel.DomainServices.Server.ApplicationServicespublicabstractclassAuthenticationBase:DomainService,IAuthenticationwhereT:IUser,new()这段代码中new()是什么意思? 最佳答案 这是newconstraint.它指定T不能是abstract并且必须公开一个public无参数co

c# - 为什么我必须显式提供泛型参数类型而编译器应该推断类型?

为什么我必须显式提供泛型参数类型,而编译器应该推断类型?publicstaticT2Cast(thisT1arg)whereT2:classwhereT1:class{returnargasT2;}示例用法:objOfTypeT2=objOfTypeT1.Cast();与我希望使用更智能的编译器的用法相比:objOfTypeT2=objOfTypeT1.Cast();或者也许我应该更聪明:-)请注意我提供了返回类型。我不想提供我在其上调用函数的对象,该方法是一个扩展方法。 最佳答案 推理不考虑返回类型;但是,您可以尝试拆分泛型;例如

C#:从泛型方法调用非泛型方法

classCustomClasswhereT:bool{publicCustomClass(TdefaultValue){init(defaultValue);//whycan'tthecompilerjustusevoidinit(bool)here?}publicvoidinit(booldefaultValue){}//publicvoidinit(intdefaultValue)willbeimplementedlater}你好。这似乎是一个简单的问题,但我在网上找不到答案:为什么编译器不使用init方法?我只是想为不同的类型提供不同的方法。相反,它会打印以下错误消息:“'Cu

C# 泛型方法返回值

我刚刚学习泛型,对方法返回值有疑问。说,我想要一个泛型方法,因为方法签名所需的泛型部分只是返回值。该方法将始终采用一个字符串作为参数,但可以返回double或整数。这可能吗?实际上我想获取一个字符串,解析其中包含的数字(可以是double或整数),然后返回该值。谢谢。 最佳答案 是这样的吗?voidMain(){intiIntVal=ConvertTo("10");doubledDoubleVal=ConvertTo("10.42");}publicTConvertTo(stringval)whereT:struct{return(

c# - 通用类的扩展方法

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicates:C#-GenericExtensionMethodHowdoyouwriteaC#ExtensionMethodforaGenericallyTypedClass是否可以为泛型类声明扩展方法?publicclassNeedsExtension{publicNeedsExtensionDoSomething(Tobj){//....}}

c# - 键入通用值 (C#)

当我尝试使用this.value为T的泛型类时:if(this.value.GetType()==typeof(int)){((int)this.value)++;}else{thrownewInvalidOperationException("Tmustbeaninttoperformthisoperation");}我收到编译时错误:“无法将类型‘T’转换为‘int’”this.value是int时,如何对其进行整型运算?请注意,这只是一个示例。该代码使用泛型进行类型转换,“int”只是T的一种类型的示例。 最佳答案 不幸的是,

c# - 如果类型 T 需要实例化,为什么通用类签名需要指定 new() ?

我正在编写一个通用类,如下所示。publicclassFoo:whereT:Bar,new(){publicvoidMethodInFoo(){T_t=newT();}}如您所见,类型T的对象_t是在运行时实例化的。为了支持泛型类型T的实例化,该语言强制我将new()放在类签名中。如果Bar是一个抽象类,我会同意这一点,但如果Bar是具有公共(public)无参数构造函数的标准非抽象类,为什么需要这样。如果没有找到new(),编译器会提示以下消息。无法创建变量类型“T”的实例,因为它没有new()约束 最佳答案 因为通常没有假设模板