根据数据库中的字符串值调用方法



所以我在Oracle表中有一个单元格,它的值将是一些系统函数或一些静态属性,如DateTime.Now.Year
在表单元格的类型是VARCHAR2.Net它的字符串。

如何为每种情况(属性,静态函数)生成泛型代码以获取字符串

中的值
string str = "DateTime.Now.Year" // the value comes from DataBase
var valueFromDataBase = str.invoke();

考虑到你正在存储一个类型和一个属性

public class Entity
{
public string TypeName { get; set; }
public string PropertyName { get; set; }
}
new Entity { TypeName = typeof(DateTime).FullName ; PropertyName = nameof(DateTime.Now) }

使用反射,你现在可以反转这个过程

public static object? GetPropertyValue(string typeName, string propertyName)
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var types = assemblies.SelectMany(a => a.GetTypes());

var type = types.First(t => t.FullName == typeName);
var property = type
.GetProperties(BindingFlags.Public | BindingFlags.Static)
.First(p => p.Name == propertyName);
return property.GetValue(null);
}
var datetime = GetPropertyValue(entityFromDb.TypeName, entityFromDb.PropertyName);

最新更新