Tag: generics

在C#中创build一个通用的方法

我正试图将一堆类似的方法合并成一个通用的方法。 我有几个方法返回查询string的值,或者如果该查询string不存在或不正确的格式,则返回null。 如果所有的types都是本地可为空的,这将是很容易的,但我必须使用可空的genericstypes的整数和date。 这是我现在拥有的。 但是,如果数字值无效,它将返回0,不幸的是在我的scheme中有效的值。 有人能帮我吗? 谢谢! public static T GetQueryString<T>(string key) where T : IConvertible { T result = default(T); if (String.IsNullOrEmpty(HttpContext.Current.Request.QueryString[key]) == false) { string value = HttpContext.Current.Request.QueryString[key]; try { result = (T)Convert.ChangeType(value, typeof(T)); } catch { //Could not convert. Pass back default value… result = default(T); } } return result; }

如何创build一个通用的扩展方法?

我想开发一个通用扩展方法,它应该按字母顺序排列string,然后按照纵向升序排列。 我的意思是 string[] names = { "Jon", "Marc", "Joel", "Thomas", "Copsey","Konrad","Andrew","Brian","Bill"}; var query = names.OrderBy(a => a.Length).ThenBy(a => a); 什么是开发通用扩展方法? 我试过了 : public static class ExtensionOperation { public static T[] AlphaLengthWise<T>(this T[] names) { var query = names.OrderBy(a => a.Length).ThenBy(a => a); return query; } } 我收到了 : 错误1:T不包含长度的定义 错误2:不能将System.Linq.IOrderedEnumerable转换为T[] 。

Lists.newArrayList vs新的ArrayList

创build一个stringList的最佳构造是什么? 它是Lists.newArrayList() (从番石榴)或new ArrayList() ? 这只是个人喜好吗? 还是只是键入genericstypes推断? 或者在使用Lists.newArrayList()有没有任何理论或实际价值?

构造函数的参考 – 创buildgenerics数组时没有警告

在Java中,不可能直接创build一个genericstypes的数组: Test<String>[] t1 = new Test<String>[10]; // Compile-time error 但是,我们可以使用原始types来执行此操作: Test<String>[] t2 = new Test[10]; // Compile warning "unchecked" 在Java 8中,也可以使用构造函数引用: interface ArrayCreator<T> { T create(int n); } ArrayCreator<Test<String>[]> ac = Test[]::new; // No warning Test<String>[] t3 = ac.create(10); 为什么编译器在最后一种情况下不显示警告? 它仍然使用原始types来创build数组,对吗?

ThreadStatic与ThreadLocal <T>:通用比属性更好吗?

[ThreadStatic]是使用属性定义的,而ThreadLocal<T>使用generics。 为什么select不同的devisescheme? 在这种情况下使用通用属性的优点和缺点是什么?

如何比较genericstypes的值?

如何比较genericstypes的值? 我已经减less到最小的样本: public class Foo<T> where T : IComparable { private T _minimumValue = default(T); public bool IsInRange(T value) { return (value >= _minimumValue); // <– Error here } } 错误是: 运算符'> ='不能应用于'T'和'T'types的操作数。 到底怎么回事!? T已经被限制为IComparable ,甚至当它限制为值types( where T: struct )时,我们仍然不能应用任何运算符< , > , <= , >= , ==或!= 。 (我知道涉及Equals()解决方法存在==和!= ,但对关系运算符没有帮助)。 所以,有两个问题: 我们为什么要观察这种奇怪的行为? 什么让我们不能比较已知是IComparable的genericstypes的值? 这难道不是以某种方式击败了通用约束的全部目的吗? […]

将对象投射到T

我正在使用.NET中的XmlReader类parsingXML文件,我认为编写一个通用的parsing函数来读取不同的属性是很明智的。 我想出了以下function: private static T ReadData<T>(XmlReader reader, string value) { reader.MoveToAttribute(value); object readData = reader.ReadContentAsObject(); return (T)readData; } 当我意识到,这不完全按照我的计划, 它会抛出一个基本types如int或double的错误,因为一个强制转换不能从string转换为数字types。 有什么办法让我的function以修改后的forms出现?

C#使用System.Type作为通用参数

我有一个需要在数据库上查询的types(System.Type)的列表。 对于每种types,我需要调用下面的extensionmethod(这是LinqToNhibernate的一部分): Session.Linq<MyType>() 但是我没有MyType,但是我想用Type来代替。 我拥有的是: System.Type typeOne; 但我不能执行以下操作: Session.Linq<typeOne>() 我如何使用types作为通用参数?

inheritance一个通用的基类,应用一个约束,并在C#中实现一个接口

这是一个语法问题。 我有一个通用的类inheritance自一个通用的基类,并正在对其中一个types参数应用约束。 我也希望派生类实现一个接口。 对于我的生活,我似乎无法弄清楚正确的语法。 这是我的: DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { … } 首先想到的是这样的: DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { … } 但这是不正确的,因为这导致T2需要实现IBar和IFoo,而不是DerivedFoo来实现IFoo。 我尝试了一些谷歌search,使用冒号,分号等,但我已经缩短了。 我相信答案是头脑简单。

通用types检查

有没有办法强制/限制传递给基元的types? (bool,int,string等) 现在,我知道你可以通过where子句将genericstypes参数限制为types或接口实现。 然而,这不符合基本法(AFAIK)的法案,因为它们并不都有共同之处(除了有人说的对象之前!:P)。 所以,我目前的想法是只是咬紧牙关,做一个大的switch语句,并抛出一个ArgumentException失败.. 编辑1: 只是为了澄清: 代码定义应该是这样的: public class MyClass<GenericType> …. 并实例化: MyClass<bool> = new MyClass<bool>(); // Legal MyClass<string> = new MyClass<string>(); // Legal MyClass<DataSet> = new MyClass<DataSet>(); // Illegal MyClass<RobsFunkyHat> = new MyClass<RobsFunkyHat>(); // Illegal (but looks awesome!) 编辑2 @Jon Limjap – 好点,和我已经考虑的东西..我敢肯定有一个通用的方法,可以用来确定types是一个值或引用types.. 这可能会立即删除很多我不想处理的对象(但是你需要担心使用的结构,如大小 )有用的..有趣的问题没有? 🙂 这里是: where T : struct 取自MSDN 。 […]