假设我在类或方法中有一个泛型成员,所以:
public class Foo<T>
{
public List<T> Bar { get; set; }
public void Baz()
{
// get type of T
}
}
Run Code Online (Sandbox Code Playgroud)
当我实例化类时,T变为MyTypeObject1,所以类具有通用列表属性:List<MyTypeObject1>.这同样适用于非泛型类中的泛型方法:
public class Foo
{
public void Bar<T>()
{
var baz = new List<T>();
// get type of T
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,我的类列表包含什么类型的对象.所以调用的list属性Bar或局部变量baz包含什么类型的T?
我做不到Bar[0].GetType(),因为列表可能包含零元素.我该怎么做?
我有一些已知类型的可观察对象集合,但是当迭代它们时,我不知道当前对象的类型。
如何获取当前对象的类型?
我已经四处寻找这个有一段时间了。我想知道如何获取传递到创建列表的模板类型。例如。
List<string> listOfStrings = new List<string>();
Run Code Online (Sandbox Code Playgroud)
我如何从中获取字符串类型?我知道如何使用类型来获取字段并查找列表类型,但不知道其中的模板。
我正在使用从我的dbml文件生成的数据类的属性生成T4模板.要获取我使用的类的属性类型item.PropertyType.Name,问题是,对于可空类型,它返回Nullable``1 , is there a way to getNullable for example, orint?`?
可能重复:
C#通用列表<T>如何获取T的类型?
让我说我有一个List<Stock>给定typeof(List<Stock>)如何确定通用列表的类型是什么?IE:在这种情况下股票?
查看类型信息,我可以看到AssemblyQualifiedName它在某种程度上提供了这一点
System.Collections.Generic.List`1 [[FullQualifiedName.Stock,TestApp,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
但我想知道我是否可以实际返回列表的泛型类型?
首先,我知道流行的建议是您应该完全避免返回空列表。但到目前为止,由于种种原因,我别无选择,只能这样做。
我要问的是如何迭代对象的属性(可能通过Reflection),获取我可能找到的任何列表并检查它是否为空。如果是,则将其变为null,否则,保持不变。
我坚持使用以下代码,其中包括一些尝试Reflection:
private static void IfEmptyListThenNull<T>(T myObject)
{
foreach (PropertyInfo propertyInfo in myObject.GetType().GetProperties())
{
if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
{
//How to know if the list i'm checking is empty, and set its value to null
}
}
}
Run Code Online (Sandbox Code Playgroud) 如果我做这样的事情:
var a = new List<something>();
var b = new something();
a.Add(b);
var c = a[0].GetType();
Run Code Online (Sandbox Code Playgroud)
C持有我想要的类型(这是"某事").如果不创建列表,你怎么能得到"东西"的类型?
我正在一个项目中,我必须通过数据模型进行反思,以找出数据模型中每个属性的类型。我的代码适用于除通用集合以外的所有情况。我必须能够知道IList中的T。
我有以下数据模型
public class ArrryOfObjects
{
public NestModelNestedClass NestClass { get; set; }
public int IntObject { get; set; }
public IList<NestModelNestedClass> ListOfObjects { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了几个示例,例如/sf/answers/73064491/,该演示了如何执行此操作,但是它们使用type.GetGenericTypeDefinition()来获取类型。但是在我的示例中,我无法使用它,因为'type.IsGeneric.Parameter'为false。
我已经阅读了类型文档,但不了解如何执行此操作。
我有一个类型的字符串表示,我需要获取该特定类型的列表.我在尝试这个:
var string_rep = "Double";
var list = _context.Entity.ToList<Type.GetType(string_rep)>();
Run Code Online (Sandbox Code Playgroud)
我得到"运算符<不能应用于类型方法组和System.Type的操作数".这样做的正确方法是什么?欣赏它.
我不明白为什么我fieldType没有资格作为通用名单.我尝试使用下面提出的解决方案来获取列表的泛型类型.但是当我到达时fieldType.IsGenericType == false,我感到非常惊讶,我不明白发生了什么.
我的目标是能够在我的上下文中为每个字段使用我的方法CreateTable().我的上下文应该只有List字段.
这是我在我的对象中找到的信息:
FieldType = {Name = "List`1" FullName =
"System.Collections.Generic.List`1[[WebApplication1.Models.Movie, WebApplication1,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
Run Code Online (Sandbox Code Playgroud)
我的代码示例:
public class MediaContext
{
public List<Movie> Movies { get; set; }
public List<Subtitle> Subtitles { get; set; }
public MediaContext()
{
this.Movies = new List<Movie>();
this.Subtitles = new List<Subtitle>();
}
}
public void CreateDB(object context)
{
Type type = context.GetType();
FieldInfo[] fields = type.GetFields(BindingFlags.Instance
| BindingFlags.NonPublic);
foreach (FieldInfo field in fields)
{
Type genericType = this.GetGenericType(field); …Run Code Online (Sandbox Code Playgroud)