相关疑难解决方法(0)

使用反射在C#中创建没有默认构造函数的类型实例

以下面的课程为例:

class Sometype
{
    int someValue;

    public Sometype(int someValue)
    {
        this.someValue = someValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我想使用反射创建这种类型的实例:

Type t = typeof(Sometype);
object o = Activator.CreateInstance(t);
Run Code Online (Sandbox Code Playgroud)

通常这会起作用,但是由于SomeType没有定义无参数构造函数,调用Activator.CreateInstance将抛出类型异常,MissingMethodException并带有消息" 没有为此对象定义无参数构造函数. "是否还有另一种方法可以创建此类型的实例?将无参数构造函数添加到我的所有类中会有点麻烦.

c# reflection instantiation default-constructor

91
推荐指数
3
解决办法
8万
查看次数

Activator.CreateInstance性能替代方案

我正在使用RedGate进行一些性能评估.我注意到动态创建一个实例Activator.CreateInstance(使用两个构造函数参数)需要花费相当多的时间...是否有更好的替代方法仍然使用反射方法(不是显式实例化)?

.net c# reflection performance

35
推荐指数
3
解决办法
3万
查看次数

Activator.CreateInstance <T>对新的

以下两种创建对象的方法有什么区别吗?

Student s1 = Activator.CreateInstance<Student>();
Student s1 = new Student();
Run Code Online (Sandbox Code Playgroud)
  • 调用构造函数或初始化内存的方式有什么不同吗?
  • 根据我的理解,第一种方法看起来完全是多余的.如果程序员在设计时知道数据类型,他将使用第二种方法.

.net reflection

27
推荐指数
4
解决办法
1万
查看次数

创建运行时确定类型的实例的最佳方法

在.NET 4中创建在运行时确定的类型实例的最佳方法是什么?

我有一个实例方法,虽然作用于BaseClass对象可能会被其派生类的实例调用.我需要创建this与方法中相同类型的另一个实例.为每个派生类重载Method是不切实际的,因为它相当复杂,并且更有效地保持单个实现.

public class BaseClass
{
     //constructors + properties + methods etc

     public SomeMethod()
     {
          //some code

          DerivedClass d = new DerivedClass(); //ideally determine the DerivedClass type at run-time
     }
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一些关于反射或使用动态关键字但我没有这些经验.

c# reflection performance runtime dynamic

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

如何使用反射创建高性能.NET类?

好的,所以我们都知道Reflecttion的性能要比"newing"类实例少得多,而且在很多情况下,根据应用程序的要求,这很好.

问题:我们如何使用后期绑定(反射)策略创建高性能.NET类.

我有一个现有的要求,即要求使用反射(CreateInstance)创建类实例,但性能至关重要.在我的情况下,我正在为我们的应用程序中的每个传入SMS消息创建实例.在生产过程中,每天可以轻松超过一百万.

我想听听并分享一些关于如何创建.NET类而不直接引用代码中的类的想法,例如使用Reflection.我还在想是否有办法以某种方式缓存一个可以改善"创建"时间的类Factory

.net c# reflection

10
推荐指数
4
解决办法
6728
查看次数

如何以非泛型方式获取类型的默认值?

我知道"default"关键字返回静态确定类型的默认值,如本问题中所示.

但是,给定一个类型的实例,是否有一种简单的方法来动态获取此类型的默认值?我发现谷歌搜索,而唯一的办法是这样:

static object DefaultValue(Type myType)
{
    if (!myType.IsValueType)
        return null;
    else
        return Activator.CreateInstance(myType);
}
Run Code Online (Sandbox Code Playgroud)

但是如果可能的话我想避免使用Activator类.

c# default-value

5
推荐指数
2
解决办法
3235
查看次数

通用 DbDataReader 到 List&lt;T&gt; 映射

我的属性绑定数据访问类有一个小问题(更像是一个烦恼)。问题是当读取器中不存在类中相应属性的列时,映射会失败。

代码

这是映射器类:

// Map our datareader object to a strongly typed list
private static IList<T> Map<T>(DbDataReader dr) where T : new()
{
    try
    {
        // initialize our returnable list
        List<T> list = new List<T>();
        // fire up the lamda mapping
        var converter = new Converter<T>();
        while (dr.Read())
        {
            // read in each row, and properly map it to our T object
            var obj = converter.CreateItemFromRow(dr);
            // add it to our list
            list.Add(obj);
        }
        // reutrn it
        return list;
    } …
Run Code Online (Sandbox Code Playgroud)

c# reflection expression-trees dbdatareader linq-expressions

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

在泛型中返回一个新实例而不是null实例

我有一个从隔离存储中提取对象的类.如果它找不到有问题的对象,则返回默认值(T),该值为null,因为它们是引用类型.如果返回的值为null,我会进行简单检查并在调用者中分配一个新实例,但我更愿意在存储逻辑中执行此操作.

所以我的问题是,有没有办法返回一个新的T,其中对象有一个默认的空白构造函数?

c# generics isolatedstorage windows-phone-7

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

用其类型实例化一个类

我正在寻找一种比Activator.CreateInstance从其类型实例化类更快的方法。

我现在正在这样做:Activator.CreateInstance(typeof(LoginView));但它非常慢:我在实例化不同视图时看到一些滞后。

给我一个建议?我现在在谷歌上搜索了几个小时,但我没有找到比这更快的方法来完成我想做的事情..:/

多谢 (:

c# reflection activator

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