C# 如何从未声明的类型中获取类和属性名称及值
如果我有这两门课:C# 如何从未声明的类型中获取类和属性名称及值,c#,asp.net,typeof,object-type,C#,Asp.net,Typeof,Object Type,如果我有这两门课: public class A { public int Id { get; set; } } public class B { public string Name { get; set; } } 我可以使用这样的通用方法吗: public void InitMethod(object classProperty) var a = new A() { Id = 1 }; var b = new B() { Name = "John" }; InitMe
public class A
{
public int Id { get; set; }
}
public class B
{
public string Name { get; set; }
}
我可以使用这样的通用方法吗:
public void InitMethod(object classProperty)
var a = new A() { Id = 1 };
var b = new B() { Name = "John" };
InitMethod(a.Id);
InitMethod(b.Name);
要像这样传入数据,请执行以下操作:
public void InitMethod(object classProperty)
var a = new A() { Id = 1 };
var b = new B() { Name = "John" };
InitMethod(a.Id);
InitMethod(b.Name);
并从方法中获取以下信息:
- 类名(例如:“A”、“B”)
- 物业名称(例如:“Id”、“名称”)
- 财产价值(例如:1,“约翰”)
// the type being evaluated
public class Foo
{
public string Bar {
get;
set;
}
}
// method in an evaluator class
public TProperty EvaluateProperty<TProperty>( Expression<Func<Foo, TProperty>> expression ) {
string propertyToGetName = ( (MemberExpression)expression.Body ).Member.Name;
// do something with the property name
// and/or evaluate the expression and get the value of the property
return expression.Compile()( null );
}
在本例中,您需要将对象传递给InitMethod,而不是该对象的属性,也许这样就可以了
class Program
{
static void Main(string[] args)
{
InitMethod(new A() { Id = 100 });
InitMethod(new B() { Name = "Test Name" });
Console.ReadLine();
}
public static void InitMethod(object obj)
{
if (obj != null)
{
Console.WriteLine("Class {0}", obj.GetType().Name);
foreach (var p in obj.GetType().GetProperties())
{
Console.WriteLine("Property {0} type {1} value {2}", p.Name, p.GetValue(obj, null).GetType().Name, p.GetValue(obj, null));
}
}
}
}
你打算用这些信息做什么?真是愚蠢的事情——生成字符串作为SQL执行以更新数据库。这些类反映了表名和这些表中的列,因此了解上面提到的三位信息将有助于初始化,因为它可以在动态生成SQL代码时为我提供要更新的表名、列名和值。另一种方法是每次手动传递/初始化值,这将是一种痛苦。使用实体框架而不是编写自己的框架如何?或者至少使用LINQtoSQL。我是用javascript/ajax做的——只是在pageload上初始化数据。听起来像是一个严重的错误。使用实体框架将更容易、更便宜地维护。Microsoft已经发明了这个特殊的轮子。在这个例子中,您还可以设置属性的值。我做过这样的事。我有单例配置,在DB中我有一个表,在表中我有KEY=>VALUE,其中KEY是属性名(我有更多的字段…),VALUE是属性的值。DB由外部系统更改,但我可以自动与之同步。若我在代码中添加属性,同步将在db中插入新行,并强制外部系统设置其值。。。说来话长。