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

c# – 如何检查值是否可以转换为泛型类型?【代码】

我有一个方法包装一些外部API调用,通常返回null.当它这样做时,我想返回一个默认值.该方法看起来像这样public static T GetValue<T>(int input) {object value = ExternalGetValue(input);return value != null ? (T)value : default(T) }问题是(T)值可能会抛出无效的强制转换异常.所以我想我会改成它var value = ExternalGetValue(input) as Nullable<T>;但这需要T:struct,我也希望允许引用类型. 然后我尝试添加一个可以处理两者的...

c# – 在重载方法中使用泛型类型【代码】

我有一个通用的方法:public bool DoSomething<T>(T item) where T: IBase {return DoSomethingSpecific(item); }public bool DoSomethingSpecific(IBase item) {return true; }public bool DoSomethingSpecific(IAdvanced item) {return false; }请注意,IAdvanced接口从IBase接口派生/继承. 我发现如果我调用DoSomething,其中项目的类型为IAdvanced,它仍然总是返回false.我不明白这一点.我知道,因为IAdvanced是一个类型IBase(因为...

c# – 为复杂泛型类型创建类或接口【代码】

我正在尝试为一种对象列表列表创建别名.具体来说,我想缩短我必须为这种类型做的所有输入:IReadOnlyList<IReadOnlyList<MyObject>>我的尝试在这里得到证明:using System.Collections.Generic;namespace MyApp {class Program{public class MyObject{public static IMyCollection GetCollection(){var a = new List<MyObject>();a.Add(new MyObject());var b = new List<IReadOnlyList<MyObject>>();b.Add(a.AsReadOnly());return ...

c# – 类型不能在泛型类型或方法’BaseController’中用作类型参数’T’.没有隐含的参考【代码】

我正在尝试创建一个通用来简化我的代码(它是一个web api项目),但不知何故它最终变得比我预期的更复杂.我想要实现的是这样的: 为了简化我的整个实际代码,这就是我写的:public interface IDatabaseTable { }public class ReceiptIndex: IDatabaseTable { }public interface IBackend<T> where T: IDatabaseTable { }public class Receipts : IBackend<ReceiptIndex> { }public class Generic<T> : SyncTwoWayXI, IBackend<T> where...

c# – 泛型类型的约束不能在IEnumerable中使用?【代码】

可能有一个问题,但我无法提出搜索条件来找到答案.. 我可能在这里遗漏了一些明显的东西,但为什么我不允许这样做,这给出了错误:“Argument 1: cannot convert from System.Collections.Generic.IEnumerable<TType> to System.Collections.Generic.IEnumerable< Test.A>” 同时打电话给DoSomething?public interface A {void Foo(); }public class B : A {public void Foo(){} }class Test<TType> where TType : A {public Test(IEn...

c# – 获取方法的MethodInfo – 此操作仅对泛型类型有效【代码】

我有以下两个Entity Framework的Include方法:public static IIncludableQueryable<TEntity, TProperty> Include<TEntity, TProperty>([NotNullAttribute] this IQueryable<TEntity> source, [NotNullAttribute] Expression<Func<TEntity, TProperty>> navigationPropertyPath) where TEntity : class;public static IQueryable<TEntity> Include<TEntity>([NotNullAttribute] this IQueryable<TEntity> source,[NotNullAttribute]...

c# – 可以将泛型类型约束到枚举?【代码】

参见英文答案 > Create Generic method constraining T to an Enum 20个我有一个通用类Foo< T>我想把T限制为枚举类型.这可能在C#中吗? 我试过了public class Foo<T> where T : enum // COMPILATION ERROR但这种方法似乎只适用于类和结构. 同样,尝试将T约束到基础枚举类型也不起作用:public class Foo<T> where T : int // COMPILATION ERROR因为int不是类或接口. 编辑我现在意识到之前已...

c# – 返回泛型类型的通用方法【代码】

我正在使用一个接受类型的restclient,后来转换为正确的IRestResponse.IRestResponse<MyClassA> response = client.Execute<MyClassA>();由于MyClassA也可以是MyClassB或MyClassC,我想过制作一个可以处理这个问题的通用方法.但没有任何运气.这是我的尝试: 公共接口IRestClient {IRestResponse响应= PerformExecuteClient()private RestResponse<T> PerformExecuteClient<T>() {return client.Execute<T>(); }编译器告诉我client.Ex...

c# – 继承指定的泛型类型【代码】

我不认为我想要的是可能的,但我希望有人可以验证这一点,也许可以解释为什么它是不可能的. 我们有Bar< T>的继承,我们无法触及Bar< T>的源代码.abstract class Foo<T> : Bar<T>我们提供Foo< T>由第三方实施,我们也想要规定任何类继承自Foo< T>是T的指定类型.当然,这可以由第三方手动完成class Fizz : Foo<Fizz>但是,我发现重复的Fizz既麻烦又丑陋.Foo< T>是否可能?自动使用Fizz作为T的指定类型?换句话说,是否可以让Foo< T>.沿着这些...

c# – 对继承的泛型类型的反思【代码】

我在c#中遇到了反射问题,但我找不到答案. 我有一个继承自泛型类的类,我试图从这个类中检索T的类型,但事实证明我不能! 这是一个例子:class Products : List<Product> {}问题是在运行时我不知道T的类型.所以我试着得到这样的类型:Type itemsType = destObject.GetType().GetGenericArguments()[0]它没有成功. 这是我的方法:public static object Deserialize(Type destType, XmlNode xmlNode){ object destObject = Acti...

.NET/C# 判断某个类是否是泛型类型或泛型接口的子类型【代码】

.NET 中提供了很多判断某个类型或实例是某个类的子类或某个接口的实现类的方法,然而这事情一旦牵扯到泛型就没那么省心了。 本文将提供判断泛型接口实现或泛型类型子类的方法。本文内容.NET 中没有自带的方法我们需要自己编写方法 .NET 中没有自带的方法 对于实例,.NET 中提供了这些方法来判断: if (instance is Foo || instance is IFoo) { }对于类型,.NET 中提供了这些方法来判断: if (typeof(Foo).IsAssignableFrom(type) |...