相关疑难解决方法(0)

在C#中转换为泛型类型

我有一个字典来将某种类型映射到该类型的某个通用对象.例如:

typeof(LoginMessage) maps to MessageProcessor<LoginMessage>
Run Code Online (Sandbox Code Playgroud)

现在问题是在运行时从Dictionary中检索这个通用对象.或者更具体:将检索到的对象强制转换为特定的泛型类型.

我需要它来做这样的事情:

Type key = message.GetType();
MessageProcessor<key> processor = messageProcessors[key] as MessageProcessor<key>;
Run Code Online (Sandbox Code Playgroud)

希望有一个简单的解决方案.

编辑:我不想使用Ifs和开关.由于性能问题,我也不能使用某种反射.

c# generics casting

38
推荐指数
6
解决办法
11万
查看次数

重构我的代码:避免在派生类中进行强制转换

首先,我对标题感到抱歉,我不知道如何准确描述我的问题.我希望通过代码更好地解释.

public abstract class AB {
  public MyModel Model;
}

public class A : AB {
  public A() {
    Model = new MyModelA();
  }

  public void AMethod() {
    var model = (MyModelA) model; // I have to do this all place
  }

  public void AnotherMethod() {
    var model = (MyModelA) model; // same here
    model.NewInt = 123;
  }
}

public abstract class MyModel {

}

public class MyModelA : MyModel {
  // new properties
  public int NewInt {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

看看代码,为了使用派生类的新属性,我必须做一个演员,但是当我必须在同一时间使用它时它很难看. …

c# refactoring

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

标签 统计

c# ×2

casting ×1

generics ×1

refactoring ×1