【c# – 如何检查值是否可以转换为泛型类型?】教程文章相关的互联网学习教程文章

func上的C#可选参数丢失泛型类型推断【代码】

我有琐碎的通用枚举解析方法:public static T Parse<T>(string value) => (T)Parse(typeof(T), value, false);用法是:public IEnumerable<DocumentTypesEnum> FileTypeEnums => FileTypes.Split(',').Select(Extensions.StringEnumerator.Parse<DocumentTypesEnum>);以上编译很好. 将可选参数添加到Parse< T>:public static T Parse<T>(string value, bool ignoreCase = false) => (T)Parse(typeof(T), value, ignoreCase);现在...

c# – 泛型类型的奇怪行为【代码】

请看下面的简单代码public class A{}public class B: A{}public class G<T> where T : A{public T GetT(){return new A();}}此代码不正确 – 编译器错误“无法将A转换为返回类型T”.但A实际上是T.如果我改变了return new A(); 至return new A() as T;一切都好.这种行为的原因是什么?提前致谢 UPD:初始问题出错.现在修好了解决方法:根据更新重新设计的答案 虽然A符合T:A的通用约束,但它是一种具体类型.但是,您的泛型类的GetT()方...

如何在C#XML摘要中显示泛型类型【代码】

/// <summary> /// Something about this generic method which works with ??? type. /// </summary> /// <typeparam name="T">???</typeparam> /// <returns></returns> public T Foo<T>() {??? }是否可以在摘要标记中编写注释以显示当前给定的泛型类型. (正如visual-studio所做的那样)? (例如,在Foo< string>()的工具提示中,我们可以看到有关此泛型方法的一些内容,它适用于字符串类型.)解决方法:这个标签应该这样做< typeparam...

c# – 如何在不知道类型的情况下转换泛型类型【代码】

我试图在运行时创建一个通用对象.到目前为止,我已经能够创建它,但我无法弄清楚如何投射它.我所拥有的是枚举对象,我想生成EnumMapper,它将枚举值转换为自定义字符串以映射到旧数据库.Type enumType = myEnum.GetType(); Type enumMapperType = typeof(EnumMapper<>).GetGenericTypeDefinition().MakeGenericType(enumType); var mapper = Activator.CreateInstance(enumMapperType); // OK EnumMapper<> mapper = (EnumMapper<>) Ac...

c# – 用于存储和使用具有特定限制的泛型类型的DataType?【代码】

我觉得这应该很容易,但我的大脑今天早上有问题. 我有自定义UserControl绑定到自定义ItemsSource.我想根据用户定义绘制项目的方式,将其设置为使用匹配的控件绘制每个项目. 例如,我希望能够从使用该控件的类中执行此操作var data = new List<object>(); data.Add(new MyClassA()); data.Add(new MyClassB()); data.Add(new MyClassB());myCustomControl.ItemsSource = myObjectArray;myCustomControl.ResourceLibrary = {{ MyClassA,...

c# – 在方法的中途添加泛型类型约束【代码】

我有两种通用方法 – public CustomObject<T> MethodA<T>(T arg1) where T : class {...return MethodB<T>(arg1); }public CustomObject<R> MethodB<R>(R arg2) where R : class, IInterface {...return new CustomObject<R>(); }问题显然是我不能用不实现IInterface的类型调用MethodB(T没有).但是,如果我这样做了 – public CustomObject<T> MethodA(T arg1) where T : class {...var casted = arg1 as IInterface;if (casted != ...

c# – 结构图和泛型类型【代码】

我的情况与我见过的其他情况有点不同.为了澄清,这不是正常的问题,例如;类似于IAClass映射到AClass等 – 这涉及到每个接口基本上使用单个具体类. 这涉及到一个通用类,但我希望能够加载它的所有可能用法. 例如 – 主要类是public class MyClass<TDomainObject> : IMyClass<TDomainObject> where TDomainObject : DomainObject所以示例用法是IMyClass<Person> p = new MyClass<Person>; IMyClass<Employer> p = new MyClass<Employer>...

c# – SimpleInjector可以在运行时为泛型类型注册初始值设定项吗?【代码】

我可以在运行时使用SimpleInjector为Generic类型注册初始值设定项吗? (见下面的最后一行代码)public class BootStrapper {Type baseTypeGeneric = typeof(Sample<>);public void BootStrap(Container container){var types =from type in Assembly.GetExecutingAssembly().GetTypes()where type.Namespace == "NS.xyz" select type;foreach (Type type in types){Type baseType = baseTypeGeneric.MakeGenericType(type);if (type...

c# – 如何在使用泛型类型时指定匿名类型的类型【代码】

标题非常令人困惑.我将尝试用一个例子来解释.请考虑以下代码:String[] str={"Apple","Banana","Cherry","Orange"}; var anoCollection=from e in str select new{ch=e[0],length=e.Length} dataGridView.DataSource=anoCollection.ToList(); //TypeInitializationException我觉得我需要在ToList< T>()方法中提到上面的类型.但是我怎么能在这里提一个匿名类型呢?解决方法:永远不可能直接提到匿名类型,但您不应该这样做.通用类型推...

c# – 如何在MVVMCross中注册泛型类型【代码】

我有一个接口定义如下:public interface ISerializationStrategy<T>还有一个通用的实现:public class SerializationStrategy<T> : Core.Strategies.ISerializationStrategy<T>当我在IOC中注册时,我必须为每种类型执行以下操作:Mvx.RegisterType<ISerializationStrategy<IdentityProvider>,SerializationStrategy<IdentityProvider>>(); ... each type或者有没有办法注册一个开放的通用(我认为这就是所谓的).以下不起作用:Mvx.R...

c# – XML反序列化泛型类型的项【代码】

假设我有以下课程:public abstract class ScheduledService : ScheduledServiceBase<ScheduledService> {public CronInfo CronInfo;public String ServiceName;public ScheduledService(){ } }public abstract class ScheduledServiceBase<T> {public ScheduledServiceBase(){ }public virtual void StartUp(IScheduler scheduler, ScheduledService service, Dictionary<string, object> parameters = null){...} }从这个基类我创...

c# – 为什么不允许指向泛型类型的指针?【代码】

例如,作为一个重载的[] setter-getter,public T this[int i]{get{unsafe{T* p = (T*)hArr.ToPointer(); // hArr is a C++ object pointer(IntPtr)return *(p + i);}}set{unsafe{T* p = (T*)hArr.ToPointer();*(p + i) = value;}}}和编译器抱怨(强调)关于它“不能将…的地址”带到托管类型T. 我知道T在运行时只会是float,double,int或byte,但我不知道如何告诉编译器,所以它信任我. 为什么我不能使用它,无论如何都是指针,如果我不小心...

方法参数C#中的有界泛型类型【代码】

问题:C#是否支持方法参数中的有界泛型类型?如果是这样,语法是什么? 上下文:我正在编写一个实用程序方法,对字典中的值进行字典排序.因此,Dictionary中的值必须实现IComparable接口. 尝试:下面的代码采用字典,获取KeyValuePair列表,对Value进行排序,然后返回字典中按其值报告的顶部键.private string[] getTopWords<T , U>(Dictionary<T, U> similarWordsAndWeights) {var myList = similarWordsAndWeights.ToList();myList.Sor...

c# – “方法未在泛型类型定义中声明”错误【代码】

我试图像这样生成动态方法:MyList<T> CreateList<T>(T arg) => new MyList<T>(){arg};这是文档中的程序修改(https://docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/how-to-define-a-generic-method-with-reflection-emit的原始程序).我只想调用基类List中定义的Add方法.我通过TypeBuilder.GetMethod方法获取此方法信息:public class MyList<T> : List<T> { } public static void Main() {var asmName = new...

c# – 如何使用autofac注册开放泛型类型,封闭泛型类型和装饰?【代码】

我使用Autofac作为我的IoC容器.我有: > IRepository<&gt ;,我的存储库界面;> DbContextRepository<>,使用EntityFramework的DbContext的存储库的通用实现;>部件中的一些封闭类型存储库,例如PersonRepository:DbContextRepository< Person&gt ;;>还有一个RepositoryDe??corator<>,用一些标准的额外行为来装饰我的存储库; 我正在使用autofac将它们全部注册为:builder.RegisterGeneric(typeof(DbContextRepository<>)).Named("repo"...