相关疑难解决方法(0)

如何从泛型类或方法的成员中获取T的类型?

假设我在类或方法中有一个泛型成员,所以:

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(),因为列表可能包含零元素.我该怎么做?

.net c# generics

647
推荐指数
11
解决办法
60万
查看次数

如何在 C# 中查找对象类型?

我有一些已知类型的可观察对象集合,但是当迭代它们时,我不知道当前对象的类型。

如何获取当前对象的类型?

c# types casting object

6
推荐指数
1
解决办法
2966
查看次数

如何从列表类型中获取模板类型?

我已经四处寻找这个有一段时间了。我想知道如何获取传递到创建列表的模板类型。例如。

List<string> listOfStrings = new List<string>();
Run Code Online (Sandbox Code Playgroud)

我如何从中获取字符串类型?我知道如何使用类型来获取字段并查找列表类型,但不知道其中的模板。

c# reflection templates types

5
推荐指数
1
解决办法
1287
查看次数

如何为可空类型获取字符串类型

我正在使用从我的dbml文件生成的数据类的属性生成T4模板.要获取我使用的类的属性类型item.PropertyType.Name,问题是,对于可空类型,它返回Nullable``1 , is there a way to getNullable for example, orint?`?

c# reflection

4
推荐指数
2
解决办法
2053
查看次数

返回列表<T>泛型类型

可能重复:
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

但我想知道我是否可以实际返回列表的泛型类型?

c# reflection types list

3
推荐指数
1
解决办法
594
查看次数

C# 如何将对象内的所有空列表变成 null

首先,我知道流行的建议是您应该完全避免返回空列表。但到目前为止,由于种种原因,我别无选择,只能这样做。

我要问的是如何迭代对象的属性(可能通过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)

c# reflection null list

3
推荐指数
1
解决办法
415
查看次数

C#GetType():如何在没有实际元素的List <T>中获取T的类型?

如果我做这样的事情:

var a = new List<something>();
var b = new something();
a.Add(b);
var c = a[0].GetType();
Run Code Online (Sandbox Code Playgroud)

C持有我想要的类型(这是"某事").如果不创建列表,你怎么能得到"东西"的类型?

c# reflection

2
推荐指数
1
解决办法
7023
查看次数

使用反射在IList &lt;T&gt;中查找&lt;T&gt;

我正在一个项目中,我必须通过数据模型进行反思,以找出数据模型中每个属性的类型。我的代码适用于除通用集合以外的所有情况。我必须能够知道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。

我已经阅读了类型文档,但不了解如何执行此操作。

c# c#-4.0

1
推荐指数
1
解决办法
413
查看次数

从类型的字符串表示中获取列表(T)

我有一个类型的字符串表示,我需要获取该特定类型的列表.我在尝试这个:

var string_rep = "Double";
var list = _context.Entity.ToList<Type.GetType(string_rep)>();
Run Code Online (Sandbox Code Playgroud)

我得到"运算符<不能应用于类型方法组和System.Type的操作数".这样做的正确方法是什么?欣赏它.

.net c# entity-framework

1
推荐指数
1
解决办法
152
查看次数

为什么反射列表<T>不通用?

我不明白为什么我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)

参考:C#通用列表<T>如何获取T的类型?

我的代码示例:

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)

c# generics list

0
推荐指数
1
解决办法
302
查看次数

标签 统计

c# ×10

reflection ×5

list ×3

types ×3

.net ×2

generics ×2

c#-4.0 ×1

casting ×1

entity-framework ×1

null ×1

object ×1

templates ×1