【问题标题】:C# paste T model class dynamically as variable [closed]C#将T模型类动态粘贴为变量[关闭]
【发布时间】:2016-10-05 15:04:34
【问题描述】:

我想将我的模型类存储为一个变量,并在我的所有代码中动态地使用它。例如我有这样的事情:

IEnumerable<Student> students = GetAllStudents();

通常我必须始终声明并重新键入 Student 类。但我只需要声明一次,然后在我的代码中动态使用它。只是我想做这样的事情:

Student dynamicType;

所以在那之后是可能的:

IEnumerable<dynamicType> students = GetAllStudents();

您能帮我找到正确的解决方案吗?有可能做这样的事情吗? 谢谢

【问题讨论】:

  • 直接使用Student有什么问题?
  • @Mostafiz 因为我只想声明一次.....我的控制器中有函数,它以声明开头:IEnumerable&lt;Student&gt; students = GetAllStudents(); 但之后我调用了一些通用方法示例:@987654327 @ 使用 StriplingWarrior 提到的类型别名,我可以使用别名,如果我需要更改类并将我的代码应用到其他地方,我只能更改别名(仅在一个地方)。还是您认为这是个坏主意?
  • @Gilad Green 我不确定,因为在 StriplingWarrior 的回答之前,我无法理解如何在 C# 中为类名取别名?主题并在其中找到我的答案。

标签: c# class dynamic declare


【解决方案1】:

这取决于您所说的“动态”是什么意思。

如果您只是不想使用班级名称“学生”,那么您正在寻找类型别名。

using dynamicType = MyNameSpace.Student;

...
IEnumerable<dynamicType> students = GetAllStudents();

如果您希望能够从代码的另一部分指定您正在处理的类型,那么您正在寻找泛型。

void DoSomething<T>()
{
    IEnumerable<T> things = GetAllThings<T>();
    ...
}

...
DoSomething<Student>();

如果您希望能够在不关联任何特定类型的情况下与该类进行交互,那么您正在寻找 dynamic 关键字。

IEnumerable<dynamic> students = GetAllStudents();
foreach(var student in students)
{
    dynamic studentFoo = student.foo; // no type checking
}

如果您想避免在任何地方输入“Student”,但您确实希望静态检查 IEnumerable 中的项目Students,那么您可能只想使用 var 关键字。\

var students = GetAllStudents();

【讨论】:

  • 非常感谢 StriplingWarrior! “如果您只是不想使用班级名称“Students”,那么您正在寻找类型别名。使用 dynamicType = MyNameSpace.Student; ... IEnumerable students = GetAllStudents();”这对我来说是正确的答案:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
相关资源
最近更新 更多