0
我試圖設置運行時選擇類型的屬性,但它始終以MissingFiledException結束。我試圖通過InvokeMember方法和Activator.CreateInstance(type)來創建實例。 通常我想從類型中分配字段以鍵入最簡單的方式,這些方式與接口或派生類(例如Data2和AssignmentData類)不相似。如何在運行時設置字段
class Program
{
static void Main(string[] args)
{
Data ww = GetBase(typeof(Data), new AssignmentData(){Id= 5, Text= "qq"}) as Data;
Data2 ww2 = GetBase(typeof(Data2), new AssignmentData() { Id = 77, Text = "qrrq" }) as Data2;
Console.ReadLine();
}
public static Object GetBase(Type type, AssignmentData ass)
{
List<string> membersName = new List<string>(type.GetMembers().ToList().Select(x => x.Name));
var obj = Activator.CreateInstance(type);
// type.InvokeMember(null,
//BindingFlags.DeclaredOnly |
//BindingFlags.Public | BindingFlags.NonPublic |
//BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);
//if(membersName.Any(x => x == "Id"))
//{
// type.InvokeMember("Id",
// BindingFlags.Public |
// BindingFlags.SetField, null, obj, new Object[] {ass.Id});
//}
if(membersName.Any(x => x == "Text"))
{
type.InvokeMember("Text",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] { ass.Text });
}
return obj;
}
public T GetInstance<T>(Type type) where T : Type
{
return (T)Activator.CreateInstance(type);
}
}
class BaseData
{
public int Id { get; set; }
}
class Data : BaseData
{
public string Text { get; set; }
}
class Data2 : BaseData
{
public string Text { get; set; }
}
class AssignmentData
{
public int Id { get; set; }
public string Text { get; set; }
}
非常感謝。我怎麼能比接受答案更好地感謝你?我的意思是任何徽章或一些? – Bajer9011
我只是想用DataAssignment中的值填充Data2屬性。我已將'GetMembers()'替換爲'GetPrperties()' – Bajer9011
沒問題。我想剛剛投票的答案。 – James