Tag: generics

如何将可枚举集合附加到C#中的现有列表

我有三个函数返回IEnumerable集合。 现在我想将所有这些组合成一个List。 那么,有什么方法可以将IEnumerable中的项目附加到列表中。 我的意思是没有每个循环?

在C#中,如果我的对象支持该接口,我如何检查T是否为IInterface类型并转换为该类型?

在C#中,我有一个使用generics传入T的函数,我想运行检查以查看T是否是实现interface的object ,如果是,则调用该interface上的methods之一。 我不希望T约束只是那个Type。 是否有可能做到这一点? 例如: public class MyModel : IModel where T : MyObjectBase { public IQueryable GetRecords() { var entities = Repository.Query(); if (typeof(IFilterable).IsAssignableFrom(typeof(T))) { //Filterme is a method that takes in IEnumerable entities = FilterMe(entities)); } return entities; } public IEnumerable FilterMe(IEnumerable linked) where TResult : IFilterable { var dict = GetDict(); return […]

如何在使用通用约束时使用inheritance

在尝试实现允许inheritance并希望有人可以提供帮助的库时,我正在努力解决一些通用约束问题。 我正在尝试建立一个有3种口味的类库,每个库都建立在另一个之上。 对我来说,这似乎是一个使用generics的绝佳机会,因为我不能通过纯粹的inheritance做我想要的事情。 下面的代码(这应该直接粘贴到VS)后面有一些解释: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { #region Base Classes public class GenericElement { } /// Visit to a GenericElement public class Generic_Visit where E : GenericElement { public E Element { get; set; } } /// Collection of Visits public class Generic_Route where V : Generic_Visit […]

inheritanceNon-Generic One C#的通用接口

这是课堂设计问题。 我有主要的抽象类 public abstract class AbstractBlockRule { public long Id{get;set;} public abstract List Restrictions {get;}; } public interface IRestriction{} public interface IRestriction:IRestriction where T:struct { T Limit {get;} } public TimeRestriction:IRestriction { public TimeSpan Limit{get;set;} } public AgeRestriction:IRestriction { public int Limit{get;set;} } public class BlockRule:AbstractBlockRule { public virtual List Restrictions {get;set;} } BlockRule rule=new […]

具有多个类的通用

我正在尝试创建这种通用方法来简化操作,但我想我搞砸了! 你能解决我的问题吗? 这编译: private string ConcatenateText(MyEntity myEntity) where T1 : Supplier, new() where T1 : Employee, new() where T2 : SupplierDepartment, new() where T2 : EmployeeDepartment, new() { T1 p = new T1(); T2 r = new T2(); //Code here for myEntity treatment return mystring; } 虽然这不编译: protected void mybutton1_Click(object sender, EventArgs e) { string […]

在C#中使用一对(三重等)值作为一个值的最佳方法是什么?

也就是说,我想要一个价值元组。 我心中的用例: Dictionary<Pair, object> 要么 Dictionary<Triple, object> 是否有像Pair或Triple这样的内置类型? 或者实施它的最佳方式是什么? 更新答案中描述了一些通用元组实现,但对于在字典中用作键的元组,您应该另外validation哈希码的正确计算。 在另一个问题中有关于此的更多信息。 更新2我想也值得提醒一下,当你在字典中使用某个值作为键时,它应该是不可变的。

从System.Type初始化通用对象

我需要创建一个generics类型,但我不知道编译时的类型。 我想这样做: Type t = typeof(whatever); var list = new List 这不会编译,因为t不是有效类型。 但它确实知道一个有效的类型。 有没有办法从System.Type中动态创建通用列表? 我可能需要反思,没关系,我在这里有点迷失。

如何在C#中使用参数化构造函数创建generics类型参数的实例

我正在尝试编写一个帮助器方法,该方法将记录消息并使用相同的消息抛出指定类型的exception。 我有以下内容: private void LogAndThrow(string message, params object[] args) where TException : Exception, new() { message = string.Format(message, args); Logger.Error(message); throw new TException(message); } 在添加new()约束之前,编译器抱怨说没有它我就无法实例化TException 。 现在我收到的错误消息是“在创建类型参数’TException’的实例时无法提供参数”。 我尝试使用无参数构造函数创建实例,然后设置Message属性,但它是只读的。 这是语言的限制还是我不知道的解决方案? 也许我可以使用reflection,但这对于这么简单的任务来说太过分了。 (而且非常丑陋,但这是个人观点的问题。)

没有拳击的通用解析方法

我正在尝试编写一个通用的Parse方法,该方法转换并返回NamedValueCollection中的强类型值。 我尝试了两种方法,但这两种方法都通过装箱和拆箱来获得价值。 有谁知道避免拳击的方法? 如果你在生产中看到这个你会不喜欢它,它的性能有多糟糕? Usuage: var id = Request.QueryString.Parse(“id”); 尝试#1: public static T Parse(this NameValueCollection col, string key) { string value = col[key]; if (string.IsNullOrEmpty(value)) return default(T); if (typeof(T) == typeof(int)) { //return int.Parse(value); // cannot convert int to T //return (T)int.Parse(value); // cannot convert int to T return (T)(object)int.Parse(value); // works but boxes } […]

在Generic类型参数之前,“out”是什么意思?

我在寻找GroupBy返回类型时看到了一种不熟悉的语法: public interface IGrouping : IEnumerable MSDN来源 我知道方法中有什么意思,但不是在generics界面中。 generics中的含义是什么?