反射将字符串当做类使用

yaotomo 2018-07-12 10:18:40
下面的语句,ClassName是不固定的,通过方法的参数传入,这个参数是字符型的,怎么在这里变成类名?不需要将类实例化。
var result = db.ExecuteStoreQuery <ClassName> ("sql语句");
使用下面的语句是将字符串的类实例化的
Activator.CreateInstance(Type.GetType(类名字符串));
...全文
233 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
就像 #3 楼所说,你要放弃两条需求中的某一条,重新研究你自己的编程思路,才能找到出路。
  • 打赏
  • 举报
回复
ClassName 是编译时(编译前)就要明确的东西,而不是什么“动态”的东西。

所以你在编程概念上就自相矛盾。到底是矛最锐利还是盾最坚固?结果就是混沌——全都是谎话而没有结果。
hztltgg 2018-07-13
  • 打赏
  • 举报
回复
你是想字符串做泛型名,这个实现了又什么用呢?result 是什么类型都不知道,你后面的代码怎么写?

既然想动态sql,那就全部动态,不要用对象映射了,返回ado.net,他的列名本来就是字符串。
threenewbee 2018-07-12
  • 打赏
  • 举报
回复
Assembly.GetType得到类名
吹风的兔子 2018-07-12
  • 打赏
  • 举报
回复

class Program
{
static void Main(string[] args)
{
Test test = new Test();
Console.WriteLine(test.Method<int>("AAA")); //111
Console.WriteLine(test.Method<string>("AAA")); //哈哈哈AAA
Console.WriteLine(test.Method<double>("AAA")); //3.1415


Console.WriteLine("-----------------------");


//反射泛型调用
Type type0 = Type.GetType("System.Int32");
Type type1 = Type.GetType("System.String");
Type type2 = Type.GetType("System.Double");



MethodInfo baseMethod = typeof(Test).GetMethod("Method").GetGenericMethodDefinition();

object value0 = baseMethod.MakeGenericMethod(type0).Invoke(test, new[] { "AAA" });
object value1 = baseMethod.MakeGenericMethod(type1).Invoke(test, new[] { "AAA" });
object value2 = baseMethod.MakeGenericMethod(type2).Invoke(test, new[] { "AAA" });

Console.WriteLine(value0); //111
Console.WriteLine(value1); //哈哈哈AAA
Console.WriteLine(value2); //3.1415

}
}

public class Test
{

public T Method<T>(string sql)
{
if (typeof(T) == typeof(int)) return (T)((object)111);
if (typeof(T) == typeof(string)) return (T)((object)("哈哈哈" + sql));
if (typeof(T) == typeof(double)) return (T)((object)3.1415);

return default(T);
}
}


111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧