Tag: generics

C#是具有generics类型约束的generics类型

让我们假设一个界面 interface IOwnedBy where T : IOwner { T Owner { get; } } 和 interface IOwner { public int Id { get; } } 在我的代码的某处,我想做以下事情: if (obj is OwnedBy) { DoSomethingWith( obj.Owner.Id ); } 基本上,我想检查obj是否是任何OwnedBy实现。 由于IOwner是任何generics参数的类型约束,我认为这个可行。 但这种情况从未得到满足。 没有使用很多reflection的任何方式?

给定约束generics方法,我可以调用非generics方法传递generics参数的实际类型

我知道尴尬的标题,最好在代码中解释。 给定一组类: public abstract class MyBaseType { public string Message { get; set; } } public class MySuperType : MyBaseType { public string AdditionalInfo { get; set; } } public class MyOtherSuperType : MyBaseType { public DateTime Started { get; set; } public DateTime Finished { get; set; } } 有没有办法编写一个generics方法,该方法调用传递generics类型的非generics方法,同时将传递的类型解释为其实际类型而不是基类型。 也就是说,我想写这样的东西: public void OutputFormattedTypeInfo(T […]

你什么时候不使用通用collections?

使用generics的优点是它增加了类型的安全性 – 你只能放入正确类型的东西,并且你可以在不需要演员的情况下获得正确的类型。 我不能使用generics集合的唯一原因是你需要存储一些任意数据。 我错过了什么吗? 在处理集合时,还有哪些其他原因不使用generics?

如何区分generics类中具有相同名称和参数数量的两种方法?

这是我的class级: public class MyClass { public void MyMethod(T a) { } public void MyMethod(int a) { } } 即使int是MyClass的generics类型参数,我如何使用Reflection Invoke MyMethod(T) ? 这是一个单一的声明(可能效率低下,但我喜欢简洁): var mc = new MyClass(); typeof(MyClass).GetMethods().ElementAt( typeof(MyClass). GetGenericTypeDefinition(). GetMethods().ToList().FindIndex(m => m.Name.Equals(“MyMethod”) && m.GetParameters().Count() == 1 && m.GetParameters()[0].ParameterType.IsGenericParameter) ).Invoke(mc, new object[] { 1 });

为什么我需要协方差接口(输出类型)?

我只需要再次使用covariant outgenerics修饰符。 我有一个generics类的类,想要添加一个但是VS告诉我这只能在接口上实现。 但为什么我只能在界面上使用out修饰符呢? 我帮助自己创建了我的类的接口副本,但这对我来说似乎有点奇怪,只有一个接口,所以我可以使用这个修饰符。

无法将类型System.Collections.Generic.IEnumerable 转换为System.Collections.Generic.List

使用下面的代码我得到这个错误,并需要帮助如何让方法Load返回List 无法将System.Collections.Generic.IEnumerable类型转换为System.Collections.Generic.List public class A { public List Load(Collection coll) { List list = from x in coll select new B {Prop1 = x.title, Prop2 = x.dept}; return list; } } public class B { public string Prop1 {get;set;} public string Prop2 {get;set;} }

WebApi2 IHttpActionResult强类型返回值

这样做是可能的,也不是理想的:(一个非常简单的例子!) [Serializable] public class MyRecord { public string key {get; set;} public string data {get; set;} } public async Task Get(string SomeKey) { if(ExistsInDB(SomeKey)) { return Ok(SomeRecordFromDB(SomeKey)); //SomeRecord() returns a POCO MyRecord. } else { //I know I can return NotFound() but not the focus of my Q return Ok(false); //returns “False” } } 有效地certificate在返回类型上没有编译时错误检查。 […]

从集合中随机返回项目

我有一个从数据库返回通用列表集合(List)的方法。 此系列包含订单详细信息,即订单ID,订单名称,产品详细信息等。 此外,该方法返回一个集合,该集合仅包含按订单日期降序排序的前5个订单。 我的要求是每次客户端调用此方法时,我需要返回有5个随机命令的集合。 我如何使用C#实现这一目标?

Unity registerType中generics参数的多态分辨率

我正在尝试执行以下操作并失败: class base {} class derived1 : base {} class derived2 : base {} interface itr where t : class, base {} class c1: itr {} class c2 : itr {} //以下2个注册失败: _unityContainer.RegisterType<itr, c1>(“c1”); _unityContainer.RegisterType<itr, c2>(“c2”); 我得到的错误是上述注册中的第二个参数不能被类型转换为第一个参数,并且该注册无效。 有关如何做到这一点的任何建议? 我需要执行上述操作,而不是使用derived1或derived2类作为通用参数进行注册,因为在解析时我不想知道我正在解析的确切派生类型。 我只想多态地使用基类型方法。

在运行时使用Type变量创建Type类型

我正在尝试简化我在一个函数中创建几个变量的方法,这个变量针对不同的类型和不同的动作重复,最终我将迁移到一个可以处理多种类型的函数,但我正在分阶段进行。 我希望能够在其类型而不是列表中创建对象列表,而无需在任何地方复制/粘贴对象类型。 我曾希望通过一些非常简单的事情来实现这一目标 Type t = typeof(LinkAddy); var x = List(); 但这不编译。 然后我尝试了以下答案提供的另一种解决方案: 存储变量类型并使用它在运行时创建集合 static IList createGenericList(Type typeInList) { var genericListType = typeof(List).MakeGenericType(new[] { typeInList }); return (IList)Activator.CreateInstance(genericListType); } 和 static List createGenericList() { List genericListType = new List(); return genericListType; } 所以这里有不同的方法和结果: Type ThisType = typeof(LinkAddy); // The normal list method, means I have […]