有这两个班级:
class A
{
public A()
{
strA1 = "A1";
strA2 = "A2";
strA3 = "A3";
}
public string strA1 { get; set; }
public string strA2 { get; set; }
public string strA3 { get; set; }
}
class B
{
public B()
{
strB1 = "B1";
strB2 = "B2";
}
public string strB1 { get; set; }
public string strB2 { get; set; }
}
我正在尝试找到一种方法来使用单一方法(可能会覆盖toString()
)根据这些中的属性数量生成信息类。
例如,结果将是:
for Class A: "{\""A1\"",\""A2\"",\""A3\""}"; // {"A1","A2","A3"}
for Class B: "{\""B1\"",\""B2\""}"; // {"B1","B2"}
如果不在每个类中编写特定代码,如何以通用方式完成?
可能一个基础课是首发...请告知
答案 0 :(得分:3)
您可以使用Reflection获取类型信息和公共属性值。这是一个扩展方法:
public static string ConvertToString(this object obj)
{
Type type = obj.GetType();
var properties =
type.GetProperties()
.Where(p => p.GetGetMethod() != null)
.Where(p => !p.GetIndexParameters().Any())
.Select(p => p.GetValue(obj, null))
.Select(x => String.Format("\"{0}\"", (x == null) ? "null" : x));
return String.Format("{{{0}}}", String.Join(", ", properties));
}
用法:
string info = new A().ConvertToString();
输出:
{"A1","A2","A3"}
答案 1 :(得分:1)
查看反射,动态读取对象的所有属性。您可以覆盖基类中的ToString,并使用反射输出所有道具。
public override string ToString()
{
var props = GetType().GetProperties();
foreach(var prop in props)
...
}
(未经测试,只是为了给你一个大概的想法。)
答案 2 :(得分:1)
您可以使用反射编写实现此类方法的基类。
Type t = this.GetType()
foreach (PropertyInfo Info in t.GetProperties())
{
// Property Name: Info.Name
// Property Value: t.GetProperty(Info.Name).GetValue(this);
}
答案 3 :(得分:0)
您可以使用XML序列化。