我有一个非常大的POCO对象集合,有几个子属性,我需要模拟...
在使用快速观看时,我看到了实体,因为我想要它......
我正在寻找的是一种扩展方法或者一种方法来对它进行拼接,这样我就可以进行单元测试并在那里进行模拟......有点:
var myPoco = new Poco {
//here goes whatever i get from my magic method
};
如何对给定对象的所有属性名称和值进行字符串处理,以便它可以分配?
编辑1:
我正在寻找类似的东西:
public static string StringFy(this object obj, string prefix)
{
string result = "";
obj.GetType().GetProperties().ToList().ForEach(i =>
{
result += prefix + "." + i.Name + " = ";
if (i.PropertyType == typeof(string))
{
result += "\"" + i.GetValue(obj) + "\";\r\n";
}
else
if (i.PropertyType == typeof(Guid))
{
result += "new Guid(\"" + i.GetValue(obj) + "\");\r\n";
}
else
{
var objAux = i.GetValue(obj);
result += (objAux == null ? "null" : objAux) + ";\r\n";
}
});
return result.Replace(" = True;", " = true;").Replace(" = False;", " = false;");
}
答案 0 :(得分:0)
您可以在类上创建一个索引器,它使用反射通过属性名称的字符串值设置属性。这是一个示例类:
using System.Reflection;
namespace ReflectionAndIndexers
{
class ReflectionIndexer
{
public string StrProp1 { get; set; }
public string StrProp2 { get; set; }
public int IntProp1 { get; set; }
public int IntProp2 { get; set; }
public object this[string s]
{
set
{
PropertyInfo prop = this.GetType().GetProperty(s, BindingFlags.Public | BindingFlags.Instance);
if(prop != null && prop.CanWrite)
{
prop.SetValue(this, value, null);
}
}
}
}
}
然后测试它:
using System;
namespace ReflectionAndIndexers
{
class Program
{
static void Main(string[] args)
{
var ri = new ReflectionIndexer();
ri["StrProp1"] = "test1";
ri["StrProp2"] = "test2";
ri["IntProp1"] = 1;
ri["IntProp2"] = 2;
Console.WriteLine(ri.StrProp1);
Console.WriteLine(ri.StrProp2);
Console.WriteLine(ri.IntProp1);
Console.WriteLine(ri.IntProp2);
Console.ReadLine();
}
}
}
输出:
test1
test2
1
2