如何根据参数的类型做不同的事情(不使用反射)?

稀有

我有一个接受泛型类型的函数,我希望能够根据该类型将某些计算的结果分配给不同的列表。我宁愿不使用反射,因为我了解到这并不是最佳实践。

这是我到目前为止的要点:

private List<int> List1 = new List<int>();
private List<int> List2 = new List<int>();
private List<int> List3 = new List<int>();

public int SomeFunction<TModel, TEntity>(DbSet<TEntity> context) where TEntity : class where TModel : SuperModel
{
    // TEntity could be one of three types: Type1, Type2, or Type3
    // If TEntity is of Type1, I want to be able to add something to List1.
    // If TEntity is of Type2, I want to be able to add something to List2.  And so on.

    /* One way to do it */

    // ... do some function stuff calculation here...
    var result = ...

    Type entity_type = typeof(TEntity)
    if (entity_type == typeof(Type1)) 
        List1.Add(result);
    else if (entity_type == typeof(Type2))
        List2.Add(result);
    else if (entity_type == typeof(Type3))
        List3.Add(result);
}

但是,我认为这不是最好的方法,因为它依赖反射进行运行时计算。有没有办法使用接口或多态来做到这一点?

另一种方法是已经分手此为三个功能,已经Type1Type2Type3实行三种不同的接口,然后添加一个where TEntity : IType1where TEntity: IType2where TEntity: IType3下面这三个功能标题。

这似乎也不对。任何帮助将不胜感激。

一般

你所描述的真的没有很多选择

  • 制作3种方法
  • 使用 IF
  • 使用模式匹配
  • 使用反射,虽然我不确定为什么
  • 你也可以使用开关

例子

switch typeof(e) { 
        case int:    ... break; 
        case string: ... break; 
        case double: ... break; 
        default:     ... break; 
}

或者你可以使类通用

public class SomeClass<T> where T : something
{

    private List<T> List3 = new List<T>();

    public int SomeFunction<TModel, T>(DbSet<T> context)
    {
        // do stuff
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java根据泛型类型做不同的事情

如何使Timer根据启动方式做不同的事情

使用反射根据参数类型转换值

是否可以使用反射来做类似于类型开关的事情?

你如何在 Xamarin 上创建一个根据平台做不同事情的函数?

如何让复选框根据其检查状态做不同的事情 True/False

让按钮做不同的事情

如何使用Scala反射查找返回类型参数的方法的类型?

不同的盒子做不同的事情

如何使用Java反射获取类型参数值?

如何使用反射基于参数类型选择方法?

如何根据参数的类型实例化不同的类?

如何根据模板类型参数调用不同的函数?

React Component onClick根据道具类型做一些事情

如何使用变换比例()来做与“缩放”相同的事情?

TypeScript根据类型参数返回不同的类型

使用反射比较通用参数类型

使用反射实例化类型参数的对象

Scala:具有不同参数类型的反射

C#反射,调用不同参数类型的方法

如何通过反射从不同的程序集中使用内部委托参数调用内部方法?

如果发生错误,如何让我的代码做一些不同的事情

如何开始工作,做一些不同的事情,然后重新开始

在一个过程中如何做不同的事情取决于事件

如何遍历数组并对最后一个索引做一些不同的事情?

我有10个ImageButtons,如何让它们用一种方法做不同的事情

如何讓 HTML 錨鏈接做 2 件不同的事情?

.Net反射使用通用参数调用函数-如何将类型传递给函数

如何在函数的参数中不使用类型的情况下指定函数的类型?