Tag: generics

通用静态字段初始化

我只是对以下代码感到好奇: public static class Container { public static readonly T[] EmptyArray = new T[0]; } 正如我所理解的,当执行以下代码时,将初始化静态类Container: … var emptyArray = Container.EmptyArray; … 我对吗 ? 有关静态generics类/成员初始化的任何解释都将受到赞赏。 提前致谢。

我可以在编译时声明Type 的变量而不指定T吗?

如何动态加载“MyContent”类? 我有1个interface ,1个抽象genericsclass和1个类。 检查我的代码: public interface IMyObjectInterface{ } public abstract MyAbstractObject : IMyObjectInterface{ } public class MyObject : MyAbstractObject{ } public interface IMyContentInterface where T : MyAbstractObject { void MyMethod(); } public abstract MyAbstractContent, IMyContentInterface where T : MyAbstractObject { public abstract void MyMethod(); } public public class MyContent : MyAbstractContent { public override void […]

测试对象是否为任何generics类型实现通用接口

我想测试一个对象,看它是否实现了IDictionary但我不关心TKey和TValue是什么。 我可以测试是否是框架Dictionary的具体实例Dictionary如下所示: bool isDict = type.IsGenericType && (typeof(Dictionary).IsAssignableFrom(type.GetGenericTypeDefinition()); 但我想不出一种方法来测试实现IDictionary东西。 这种技术不适用于界面; 如果我对通用基类型IDictionary测试,则IsAssignableFrom返回false,这看起来很奇怪,因为它适用于具体类型。 通常你会使用is来测试某些东西是否实现了一个接口,当然这只有在我想测试一个特定的通用接口时才有效。 或者我只测试一个共同的祖先接口,但与其他通用数据结构(如IList和ICollection ,没有唯一的非generics接口,genericsIDictionaryinheritance该接口。

如何将2个generics类型传递给扩展方法

我创建了以下扩展方法 public static T Map(this TEntity entity) where TEntity : IEntity { return Mapper.Map(entity); } 这允许以下内容 Db.ExchangeSets.FirstOrDefault().Map() 但是我想知道无论如何我可以修改扩展方法,所以我可以调用如下的缩短版本 Db.ExchangeSets.FirstOrDefault().Map() 请注意 : 是否应该像这样使用automapper不在问题的范围内,它更像是一个事实发现任务 更新 对于那些在家里玩的人,在scotts评论的帮助下,我设法在autneric 扩展方法中找到了上述函数的额外求解 public static T Map(this IEntity entity) { return (T)Mapper.Map(entity, entity.GetType(), typeof(T)); } 但是除了AutoMapper之外,这不是实际问题的答案,而是相应地标记优点

generics问题中的C#inheritance

我有两个接口: public interface A { void aMethod(); } public interface B : A { void bMethod(); } 后来我基本上使用这样的字典: Dictionary dict = new Dictionary(); C#说我无法从右转换,即使我投了它。 有没有办法在C#中使用generics,以便这可以工作? 如果我把它们作为抽象类,它似乎没问题,但我需要这些作为接口。

ASP.NET MVC 3 Generic DisplayTemplates

我刚刚使用ASP.NET MVC 3开始了一个项目。我正在现有的对象系统之上构建,所以我要做的第一件事就是为现有的各种类型定义显示和编辑器模板。 在MVC中是否可以使用generics参数定义DisplayTemplate? 例如,我们有一个BitString类,它将枚举作为generics参数,并表示包含所提供枚举的选项列表。 我希望我可以定义一个处理所有BitString实例的显示/编辑器模板。 我目前正在使用Razor作为我的观点,但我不介意混合和匹配ascx(或直接C#,如果有办法做到这一点)来实现这一点 谢谢 编辑:我认为这可能是这个问题的重复…但它已经有一年半了,所以也许有人在这一点上有更好的答案? 通用局部视图:如何将generics类设置为模型?

InvalidCastException尝试从盒装int转换为可为空的枚举

我有一个枚举, Foo : public enum Foo { Alpha, Bravo, Charlie } 如果我尝试从盒装int到Foo?的以下演员Foo? ,我得到一个InvalidCastException : var x = (Foo?)(object)1; 这导致我进行了一些实验…… var x = (Foo)(object)1; // succeeds var x = (long)(object)1; // fails var x = (long?)(object)1; // fails var x = (long)1; // succeeds var x = (long?)1; // succeeds var x = (int)(object)1; // succeeds […]

如何从通用方法访问类的属性 – C#

我有一个三级,具有以下属性 Class A { public int CustID { get; set; } public string Name{ get; set; } } Class B { public int CustID { get; set; } public string Age { get; set; } } 我创建了一个接受所有这些类的generics方法。 public void ProceesData(IList param1, string date1) { Parallel.ForEach(T, (currentItem) => { // I want to aceess CustID property […]

C#:数字的通用接口

我试图执行一些独立于数字类型的通用数字操作。 但是,我知道无法使用generics来做到这一点。 第一个想法是使用where语句过滤传入的类型,但所有数字类型都是关闭的,因此对于通用filter无效。 此外,generics不允许标准的数字运算(加法,移位等),因此我能想到的唯一解决方案是非泛地重写每个方法。 还有其他想法吗? 作为参考,以下是我最初尝试的代码: private const int BYTE_SIZE = 8; private const int UINT16_SIZE = 16; private const int UINT32_SIZE = 32; private const int UINT64_SIZE = 64; public static byte[] ToBytes(UInt16[] pnaValues) { return ToSmaller(pnaValues, BYTE_SIZE, UINT16_SIZE); } public static byte[] ToBytes(UInt32[] pnaValues) { return ToSmaller(pnaValues, BYTE_SIZE, UINT32_SIZE); } …. public static […]

C#为generics类创建隐式转换?

我有一个generics类,我曾经把数据写入IsolatedStorage。 我可以使用static implicit operator T()从我的Generic类转换为Generic Parameter T 例如 MyClass foo = new MyClass(187.0); double t = foo; 我的问题是,我该怎么做呢? MyClass foo = new MyClass(187.0); double t = 0.2d; foo = t; 隐式运算符必须是静态的,所以我不确定如何传递我的类的实例?