Tag: generics方法

C#:如何使用带有“out”变量的generics方法

我想创建一个简单的通用函数 void Assign(out T result) { Type type = typeof(T); if (type.Name == “String”) { // result = “hello”; } else if (type.Name == “Int32”) { // result = 100; } else result = default(T); } 用法: int value; string text; Assign(value); // <<< should set value to 100 Assign(text); // <<< should set text […]

C#调用动态通用方法

给出以下接口: interface IEntity { int Id{get;} } interface IPerson : IEntity { string Name{get;} int Age{get;} } interface ITeacher : IPerson { string StaffId{get;} } interface IStudent : IPerson { string StudentId{get;} string Courses{get;} } interface IRepository { T Get(int id) where T : IEntity } 我的命名空间中有以下类 public class EntityBase() : IEntity { int Id{get;set;} […]

没有指定类型的C#通用方法

好的,所以我是一个开始使用C#的Java人员,我正在编写并开始制作一个通用的方法,我编写的运行和编译,但它违背我所知道的关于generics应该如何工作的一切,所以我希望有人可以解释这个对我来说: 所以我有一个定义如下的generics方法: public static List CopyAsList(IEnumerable list, Object lockObject) { if (list != null) { lock (lockObject) { return new List(list); } } return null; } 但对我来说奇怪的是,我可以调用这个generics方法而无需指定T并且它可以工作: List strings = new List() { “a”, “b”, “c”}; List ints = new List() { 1,2,3}; object lockObject = new object(); foreach (string s in CopyAsList(strings, lockObject)) { […]

使用Reflection通过签名调用对象实例上的generics方法:SomeObject.SomeGenericInstanceMethod (T参数)

如何调用SomeObject.SomeGenericInstanceMethod(T arg) ? 有一些关于调用generics方法的post,但不完全像这个。 问题是method参数被约束为generics参数。 我知道如果签名是相反的 SomeObject.SomeGenericInstanceMethod(string arg) 然后我可以得到MethodInfo typeof (SomeObject).GetMethod(“SomeGenericInstanceMethod”, new Type[]{typeof (string)}).MakeGenericMethod(typeof(GenericParameter)) 那么,当常规参数是generics类型时,如何获取MethodInfo? 谢谢! 此外,generics参数可能有也可能没有类型约束。