草庐IT

泛型库

全部标签

c# - 返回类型 T 不能返回为 null? C#泛型

我有一个方法可以从用户提供的文件路径和对象类型中反序列化存储的对象。该方法工作正常,除非用户提供了无效的文件路径。在这种情况下,我希望我的方法返回null,但是当我尝试返回null时,出现编译错误。我尝试使用可空类型,但出现编译错误。相反,我对一个对象进行类型转换并返回它,但它会导致运行时错误。我想知道是否有人知道允许返回null的正确方法。代码如下:publicstaticTRestoreObj(stringdatafile){try{varfs=File.OpenRead(datafile);varbf=newBinaryFormatter();varobj=(T)bf.Deser

c# - 当泛型类型匹配采用该类型的重载方法时,Visual Studio 2015 不编译

我的项目在VS2013中编译但在VS2015中不编译。下面的代码重现了编译问题。Validator类实际上在第3方程序集中,因此我无法更改实现。require类是本地类,但我不想更改实现,因为我将不得不更改大量验证逻辑。下面是在VS2015中无法编译的代码。publicabstractclassValidator:Validator{publicoverridevoidDoValidate(objectobjectToValidate){}protectedabstractvoidDoValidate(TobjectToValidate);}publicabstractclassVal

c# - 为什么 C# 不允许将泛型类型用作泛型类中的属性?

这个问题在这里已经有了答案:WhydoesC#forbidgenericattributetypes?(9个回答)关闭3年前。这不是一个非常重要的问题,我只是好奇为什么不允许这样做。错误消息对解释没有帮助,因为显然“Att”确实继承自Attribute。publicclassGenericwhereAtt:System.Attribute{[Att]//Error:'Att'isnotanattributeclasspublicfloatnumber;}

c# - 非泛型类上的 C# 泛型方法归结为什么?

如果我有这样的类(class):-staticclassFoo{publicstaticvoidBar(Titem){Console.WriteLine(item.ToString();}}我知道在这个例子中没有必要使用T因为所有类型都有ToString()等等——这只是一个人为的例子。我更感兴趣的是引擎盖下发生的事情,具体如下:-Foo.Bar("Hello");Foo.Bar(123);Foo.Bar(newEmployee("Isaac"));我广泛地(思考!)我理解具体化,即如果你创建不同类型的泛型类,例如ListListList等然后在编译时(或运行时?)我们最终得到三种实际

c# - 编译器在传递方法时无法确定泛型类型

我在使用C#和泛型类型推断时遇到了问题。我想编写一个方法来传递具有任何类型的方法,但编译器无法推断我传入的方法的类型。编译器总是提示消息Expectedamethodwith'???TestFunc(???,???)'signature这是一个测试用例。usingSystem;publicclassExample{privateinterfaceITest{intTestFunc(stringstr,inti);}privateclassTest:ITest{publicintTestFunc(stringstr,inti){return0;}}publicstaticvoidMain

c# - Visual Studio 2015 Intellisense 无法确定某些泛型方法中的 lambda 类型

注意:这是Roslyn中的错误,已在VisualStudio2017中修复。VisualStudio2015无法确定Enumerable.Join等方法中lambda参数的类型.考虑以下代码:publicclassBook{publicintAuthorId{get;set;}publicstringTitle{get;set;}}publicclassAuthor{publicintId{get;set;}publicstringName{get;set;}}publicstaticvoidNoIntellisenseInEnumerableJoin(){IEnumerableboo

c# - C#泛型是如何实现的?

我曾认为C#中的泛型的实现方式是在运行时或编译时生成新的类/方法/你有什么,当使用新的泛型类型时,类似于C++模板(我从未真正研究过,我很可能是错的,对此我很乐意接受更正)。但是在我的编码中我想出了一个确切的反例:staticclassProgram{staticvoidMain(){TesttestVar=newTest();GenericTestgenericTest=newGenericTest();intgen=genericTest.Get(testVar);RegularTestregTest=newRegularTest();intreg=regTest.Get(test

c# - 为什么不在用作泛型类型参数的类上调用静态构造函数?

给定以下类:publicclassFoo{staticFoo(){Console.WriteLine("Fooisbeingconstructed");}}publicclassBar{publicvoidReferenceFooAsGenericTypeParameter(){Console.WriteLine("Fooisbeingreferencedasagenerictypeparameter");}}publicclassSampleClass{publicstaticvoidMain(){newBar().ReferenceFooAsGenericTypeParameter

c# - 为什么泛型类型推断在那种情况下不起作用?

当尝试在LINQPad中编译以下代码时:voidMain(){DriveInfo.GetDrives().Select(GetProviderName).Dump();}staticstringGetProviderName(DriveInfodrive){//someirrelevantWMIcode...}我收到以下错误:Thetypeargumentsformethod'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)'cannotbeinferredfromtheu

c# - XML反序列化泛型方法

我有下一个XML文件:d639a54f-baca-11e1-8067-001fd09b1dfd-24145e3b3b4cd-bb8e-11e1-8067-001fd09b1dfd0.28我将它反序列化为这个类:[XmlRoot("Root",IsNullable=false)]publicclassDocBalanceCollection{[XmlElement("Document")]publicListDocsBalanceItems=newList();}DocBalanceItem是:publicclassDocBalanceItem{[XmlElement("Id")]pub