For example:
class TestType
{
public int a;
public int b;
}
TestType obj = Activator.CreateInstance(typeof(TestType), 1, 2) as TestType;
那么
obj.a==1
和 obj.b==2
是什么意思?有人知道如何解决我的问题吗?For example:
class TestType
{
public int a;
public int b;
}
TestType obj = Activator.CreateInstance(typeof(TestType), 1, 2) as TestType;
obj.a==1
和 obj.b==2
是什么意思?有人知道如何解决我的问题吗?不可能,改为尝试
TestType obj = Activator.CreateInstance(typeof(TestType)) as TestType;
obj.a = 1;
obj.b = 2;
TestType obj = Activator.CreateInstance(typeof(TestType), 1, 2) as TestType;
TestType obj = Activator.CreateInstance(typeof(TestType), 1, 2) as TestType;
class TestType
{
public TestType(int a, int b)
{
this.a = a;
this.b = b;
}
public int a;
public int b;
}
你把事情搞混了。语法new TestType { a=1, b=2 }
并不是调用构造函数,而是一种快捷方式,可以在一次操作中调用隐式或默认构造函数并设置一些属性。但所有的类都有构造函数,至少有一个隐式构造函数。
我不知道你的最终目标是什么,但如果你使用Activator
来创建实例,那么你可能在编译时没有类型。因此,你无法通过类型本身访问属性,你需要调用PropertyInfo.SetValue
(https://learn.microsoft.com/en-us/dotnet/api/system.reflection.propertyinfo.setvalue?view=netframework-4.7.2)。
请参考以下示例:
class TestType
{
public int a;
public int b;
}
void Main()
{
var typeName = typeof(TestType).FullName; // we have a string from here on
var type = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(x => x.FullName == typeName); // get the type based on the name
var obj = Activator.CreateInstance(type); // object of this type, but without compile time type info
var member = type.GetField("a"); // we know, that this is a field, not a property
member.SetValue(obj, 1); // we set value to 1
member = type.GetField("b");
member.SetValue(obj, 2); // we set value to 2
Console.Write($"See values: a={((TestType)obj).a}, b={((TestType)obj).b}");
}
new TestType(1) { b = 2 }
。 - Lasse V. Karlsen